見出し画像

初めてのコンセンサスアルゴリズム

はじめに

Project LUCKと書く人

Project LUCKメンバーの佐藤です!Project LUCKというのは、株式会社マーキュリー(代表取締役:都木聡)の中で立ち上げたプロジェクトです。そのコアメンバーが日々、自分たちが学んだことや読者の皆さんとコミュニケーションをとりたいと思い、さまざまな記事を書いています。

今回のテーマ

今回は以前記事を投稿したブロックチェーンの合意形成アルゴリズム(コンセンサスアルゴリズム)について、よりかみ砕いた内容で記事を書いていきたいと思います。

この記事ではコンセンサスアルゴリズムのそもそもの定義や、どのようなことができるのかについて細かく解説してきたいと思います。

ブロックチェーンの合意形成アルゴリズムについて はこちら👇


コンセンサスアルゴリズムとは

どんなもの?

コンセンサスアルゴリズムとはP2Pネットワーク上の分散されたネットワーク環境の中でネットワーク全体が一つの結論に至るための方法のことです。

P2Pネットワークについてはこちらに解説記事を記載しています。
Peer to Peer(P2P)ってどんな仕組み? についてはこちら👇

具体例

ブロックチェーンにはいくつかの役割が存在しています。
今回はその役割をバスに例えてコンセンサスアルゴリズムについて説明したいと思います。

  • ブロックチェーンにおけるトランザクション(取引履歴)が詰まっているバス(正式にはブロック

    • トランザクションバス

  • バスに乗車する際に乗車券の確認を行う警備員

    • 代表警備員

  • バスの乗客が正しいか再度確認する警備員

    • ノード警備員

まずトランザクションバスに乗客が乗る際にそのチケットが正しいものか、偽造されていたり使いまわされていないか代表警備員が確認を行います。

その確認が終了し、すべての乗客がバスに乗るもしくは発車時間が来るとノード警備員たちはそれぞれ乗客が本当に問題ないかを確認します。

これらの確認が終わり、ノード警備員たちが問題ないと判断するとバスは無事に発進できます。

この例の中で、ノード警備員たちが再確認を行った後問題ないと判断する必要があります。
コンセンサスアルゴリズムは、代表警備員の決定と、ノード警備員間での確認をスムーズに正確に行うための方法として使用されています。

では、次章ではその内容について具体的に解説を行っていきます。

コンセンサスアルゴリズムによって可能になること

コンセンサスアルゴリズムを用いることで大きく三つの要素が行えるようになります。

一貫性の確保

P2Pネットワーク上のコンセンサスアルゴリズムによって、そのネットワーク上のすべてのノード間でネットワークの状態や、ネットワーク内に存在するデータが共有されます。

この仕組みによって、ネットワーク全体のノード間での一貫性を確保できます。

対障害耐性

次に、これはP2Pによる恩恵が大きいですがノードのうち一部が動かなくなったという状況においても、問題なくネットワークを稼働できる「対障害耐性」を持たせることができます。

この仕組みによって、一部のノードが正常な動作をしない場合や悪意のある行動を行った場合でもネットワークを正常に稼働させることができます。
※一定の数を超えるとネットワークの正常な稼働に問題が発生する場合もあります。

分散型意思決定

最後に、前章に解説したノード警備員間での確認をスムーズに行うための仕組みがこの分散型意思決定となります。

この仕組みを用いることで、共通の合意方法に基づいてネットワーク全体で一つの結果に至ることが可能となります。

これらの方法を用いることで、ネットワーク全体で一つの結果を出すことが可能ですが、必ずその結果が正しいものにならないことに注意が必要です。

つまり合意を形成する方法であるだけで、合意することではないということです

もっと具体的にどんなことができるのか

この章では、先ほどまで解説してきた内容をもとにコンセンサスアルゴリズムは実用面でどのようなことが可能なのかについて解説します。

安全性

コンセンサスアルゴリズムを用いると、不正なトランザクション(取引)を拒否し、正当なトランザクションのみの承認が可能となります。

ブロックチェーンでは、不正なトランザクションを承認するとペナルティが与えられることが多く、不正なトランザクションを承認するメリットが少なくなっているため、安全に取引の承認ができるようになります。

しかしながら、先ほども解説したようにネットワークの大半が悪意のあるノードに占拠されてしまうと不正なトランザクションに対してペナルティが発生しなくなります。

ライブネス(Liveness)

ブロックチェーンの仕組みとして、すべてのトランザクションに対して承認の判断を行うためネットワークが混雑している状況でも最終的にトランザクションが処理されます。

障害耐性

こちらは先ほども解説した障害耐性と同じです。

スケーラビリティ

P2Pネットワークでは、それぞれのノードごとに通信を行いネットワーク全体で承認を行っていく過程で、ネットワークが拡大するとともに承認にかかる時間が増加していきます。

コンセンサスアルゴリズムでは、ネットワークの規模が拡大しても一定程度の効率で機能する仕組みで作成されています。

しかしながら一定程度の遅延が発生する場合があり、現在さらなる改善のために議論されています。

実用性

ブロックチェーンを稼働させていくうえで、あまりにも遅い承認時間というの実用性に欠けてしまいます。
そのため、コンセンサスアルゴリズムではネットワークが正常にできる範囲で処理を行えるような工夫がされています。

具体的な利用例

この章では代表的なコンセンサスアルゴリズムについて下記の画像を参考に解説していきたいと思います。

ビットコイン

ビットコインではナカモトコンセンサスと呼ばれるコンセンサスアルゴリズムが利用されています。これはProof of Work(PoW)とも呼ばれています。

ナカモトコンセンサスでは、マイニングと呼ばれる作業を行い最初に作業を完了したノードがトランザクションの処理を行います。

ナカモトコンセンサスでは1秒あたり10~13件のトランザクションを処理可能です。

ビットコイン関連の解説記事はこちら👇

イーサリアム

イーサリアムではクラシカルコンセンサスと呼ばれるコンセンサスアルゴリズムが利用されています。これはProof of Stake(PoS)とも呼ばれています。

クラシカルコンセンサスでは、ステーキングと呼ばれるノードが自身の保有するイーサリアムを担保としてトランザクションの処理を行います。
トランザクションの処理を行う代表者はステーキング量に応じて抽選で選ばれます。

イーサリアムのクラシカルコンセンサスでは1秒あたり約25件のトランザクションを処理可能です。

イーサリアムの解説はこちら👇

ソラナ

ソラナではクラシカルコンセンサスとナカモトコンセンサスを組み合わせたコンセンサスアルゴリズムが利用されています。これはProof of History(PoH)とも呼ばれています。

このコンセンサスでは、トランザクションの処理を行う代表者の選出はPoSの仕組みを用いて処理され、トランザクションの承認についてはPoWを改善した仕組みによって処理が行われています。

ソラナのコンセンサスアルゴリズムでは1秒あたり約3,000件のトランザクションを処理可能です。

ソラナの解説はこちら👇

リップル

イーサリアムではXRP Ledger コンセンサスと呼ばれるコンセンサスアルゴリズムが利用されています。これはProof of Association(PoA)とも呼ばれています。

XRP Ledger コンセンサスでは、リップルを運営するRipple社によって選出されたノードがトランザクションの処理を行います。
他のコンセンサスアルゴリズム比べて比較的中央集権的である点が指摘されることもありますが、比較的高速にトランザクションの承認を行えます。

リップルのXRP Ledger コンセンサスでは1秒あたり80~100件のトランザクションを処理可能です。

リップルの解説はこちら👇


最後に

今回はコンセンサスアルゴリズムについて、抽象的な内容から具体的な内容になるように解説を行っていきました。

関連の解説記事も多く添付しておきましたので、まだ理解が難しいなという方はそちらを参考にしてみてはいかがでしょうか!?
そちらの記事では各プロジェクトごとの詳しいコンセンサスアルゴリズムについての解説も行っています。

いいなと思ったら応援しよう!