⛓️

コンセンサス・アルゴリズム(PoW/PoS/DPoS/Casper)について

2022/05/20に公開

私は現在ブロックチェーン技術について勉強をしており、その中で気になったことを、記事として整理していければと思います。
※ 投機目的ではなく、あくまで純粋に技術を勉強しています。

※ 参考図書: 「ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

今回は、コンセンサス・アルゴリズムについて整理していきます。

コンセンサス・アルゴリズムとは、「データの合意を取る方法」を意味します。

暗号資産(仮想通貨)の取引や送金データを正しくブロックチェーンに繋ぐための仕組みです。

ブロックチェーンは、非中央集権ネットワークであり、信頼できる中央の情報源がないため、ブロックチェーンネットワーク内のノードがシステムの状態について合意を得るための手段が必要となります。

ちょっと話がずれますが、、
私個人、今までクライアント・サーバ型のシステムを扱ってきた身としては、P2Pネットワークで世界中のノード同士が直接繋がって通信をしていくということが、まだイメージ的に慣れておりません。

例えば、Twitterのようなクライアント・サーバ型で中央集権的なアプリケーションを開発している場合、データベースはTwitter社が管理しているものになりますし、そのデータベースに対して書き込みを行うことは、特に何も意識はしないと思います。(データベースに対してアクセスできる情報があれば、何らかのアクセス制限はあったとしても、接続状態が保てれば、それ以上に何かを考えることは無い、はず)

なので、ここでいうデータを書き込んだりすること(ブロックチェーンにブロックをつなぎ込んでいくこと)に対して、誰かの合意や承認が必要という感覚を、今まで持つことがなかったので、なかなか慣れないのだと思います。

それでは、
コンセンサス・アルゴリズムのうち、今回は下記について整理していきたいと思います。

1. PoW(Proof of Work)

2022/05/20 時点で、ビットコインやイーサリアムなど多くの仮想通貨で採用されている承認方式となります。(※ イーサリアムは後で説明するPoSへの移行を予定しています。)

マイニングと呼ばれる計算を行って生成されたブロックが、ネットワークで他のノードより有効であると認められるのに必要な証明です。

PoWでは、3つのステップでブロックを生成・承認します。

  1. マイニング(Nonce生成)
    1. マイナーがマイニングを行い、Nonce(計算の答えとなる値)を生成する
  2. ハッシュ値生成&ブロック生成
    1. そのNonceを入れたブロックのデータをハッシュ関数に代入し、ハッシュ値を得る。このとき、このハッシュ値がある値以下になっていればマイニング成功となり、ブロックを生成できる。ハッシュ値がその値より大きい場合、1→2の操作をひたすら繰り返す
  3. ノードの投票
    1. 新規生成されたブロックをPoWの結果も含め各ノードで検証する
  4. ブロック承認
    1. 有効なブロックであれば、各ノードが自分のメインチェーンに追加する

PoWにはいくつか問題点を抱えていると言われています。

  1. ネットワークへの悪意のある攻撃に弱い
    1. 51%攻撃と呼ばれるもの
  2. マイニングによる電力消費、コストが高い
  3. 取引にかかる時間が長い
    1. ビットコインだと約10分に1度のブロック生成。取引処理件数は約7件/1秒と言われており、VISAカード(1700件/1秒)と比べると大きく劣る。

そのため、上記の問題を解決していくよう、PoW以外のコンセンサス・アルゴリズムも開発されています。

2. PoS(Proof of Stake)

PoSは、ひとことでいうと「保有している通貨の量に慰霊して、新たにブロックを生成・承認する権利を得られる仕組み」です。
先程紹介したPoWの中でも、「1. ネットワークへの悪意のある攻撃に弱い」が大きな問題であり、それらの課題を改善するためにPoWは開発されました。
一般的なPoSでは、コインの保有量に比例してブロック承認の成功確率が上がるようになっています。

「コインの保有量」を定義する仕組みは、下記2種類があります。

  1. Coin Age
    1. 算出方法は、「コインの保有量」×「コインの保有期間」
  2. Randomized Proof of Stake
    1. コインの保有量が多いとマイニング成功確率が上がる

現在、「Coin Age」よりも「Randomized Proof of Stake」のほうが主流となっています。

PoSについて、PoWの課題を解決できる画期的なアルゴリズムだと考えられていますが、それでもいくつか課題があります。
※ 今回は軽く触れます

  1. コインの流動性低下
    1. コインを溜め込み、保有量を増やすようにインセンティブが働くため
  2. Nothing at Stake
    1. PoSではリスクなく複数のフォークしたブロックチェーンに対してブロック生成できてしまう問題のこと
  3. 低コスト51%攻撃

3. DPoS(Delegated Proof of Stake)

先程紹介したPoSには、関連する様々なアルゴリズムが存在します。その中で、まずはDPoSについて取り上げます。

DPoSは、コインの保有者に保有量に応じた投票券を割りあて、その投票によりブロックの承認者を選び、選ばれた少数の承認者がブロック生成をするアルゴリズムです。
委任された承認者は、ブロック生成で得られた報酬を投票した人に還元する仕組みになっています。
この承認作業のことを鋳造(mintingないしforging)と呼んでいます。

DPoSの役割を整理すると2種類あります。

  1. バリデーター(validator)
    1. ブロックの承認者。実際に作業をするヒト
  2. デリゲーター(delegator)
    1. バリデーターに作業を委任するヒト。投資家のようなイメージ

EOSやLISKといった仮想通貨で取り入れられているコンセンサス・アルゴリズムになります。

4. イーサリアムのCasper

最後に、イーサリアムで新しく開発が進んでいるCasperについて説明します。現時点では、イーサリアムではPoWを採用していますが、新しくPoSへ移行する予定になっており、そのPoSのアルゴリズムの中でも独自に開発や検討が進んでいます。
※ 現時点でも開発が進行中であるため、最終的にPoS移行時にどのようなアルゴリズムが採用されるかは、確定していない状況です。

開発が検討されたアルゴリズムは2つあります。(※ Casper CBCは、Casper V2と表記されている情報もありました。)

  1. Casper FFG(Friendly Finality Gadget)
  2. Casper CBC(Correct by Construction)

4.1. Casper FFG(Friendly Finality Gadget)

Casper FFG は、PoWとPoSのハイブリッドを目指したものです。
マイナーがPoWでブロックを生成し、そのブロックをバリデーター(ブロックの承認者)がPoSで100ブロックごとに承認することでファイナリティをもたらす方式です。
Casperは開発方針が発表された当初、段階的実装される予定で、まずは、Casper FFGの実装が取り組まれていました。しかし、2018年以降、Casper FFGは破棄し、次に紹介するCasper CBCに専念することが発表されました。

4.2. Casper CBC(Correct by Construction)

Casper CBCは、完全なるPoSを目指した方式です。
Casper CBCを利用すると、以下のようなメリットがあります。

  1. 合意形成の安全証明が比較的簡単に行える
  2. プロトコル内におけるファイナリティの限界値が存在しない

最後に、コンセンサス・アルゴリズムの話と関連したお話ですが、
イーサリアムでは、このPoS(Casper CBS)への以降と合わせ、シャーディングの実装を行い、スケーラビリティ問題とストレージの問題を解決しようとしています。このイーサリアムの大型アップデートを「イーサリアム2.0」または「Serenity(セレニティ)」と呼んでいます。
実施時期はまだ未定ですが、直近のニュースを見ると8月中だったり、2022年度中という情報も出てきています。

Discussion