ブロックチェーンの合意形成「プルーフ・オブ・～」についてまとめてみた

## コンセンサスアルゴリズムとは
ブロックチェーンの仕組みについて見聞きしたことのある方は、「プルーフ・オブ・ワーク」という言葉を聞いたことがあると思います。
ブロックチェーンのコンセンサスアルゴリズムですね。
コンセンサスアルゴリズムとは、**ブロックチェーンに新たに繋ぐブロックを確定する方法**を指します。
一度確定されブロックチェーンに取り込まれたブロックは、その後永続的に残り続けます。

## 「プルーフ・オブ・ワーク」だけじゃない
BitcoinやEthereumなどメジャーなブロックチェーンプラットフォームが採用しているため、コンセンサスアルゴリズムといえばProof of work（PoW）、それ以外は存在しないと思う方もいらっしゃるかもしれませんが、実はコンセンサスアルゴリズムはPoWだけではありません。
なお、Ethereumは近い将来「プルーフ・オブ・ステーク」というコンセンサスアルゴリズムに移行すると発表されています。

今回はブロックチェーンのコンセンサスアルゴリズムについていくつか取り上げ、その特徴をご紹介したいと思います。

## Proof of work（PoW）
- 特徴

ご存知、PoWです。メリットは**改ざんに強い**ことです。
なぜ改ざんに強いかというと、正しい仕事をすれば報酬がもらえるというインセンティブモデルだからです。
仮に台帳の改ざんを試みたとしましょう。
改ざんに成功すれば不正に多くの資産を手に入れることができる可能性もありますが、そのためには全マイナーの半分を大幅に超えるCPUパワーを自らが用意し、正常なブロックチェーンを十分追い越すまで台帳を書き換えていかねばなりません。
これは極めて困難なことで、bitcoinブロックチェーンがこれまで改ざんされたことが無いという事実からもそのことがいえます。
そんなに難しいことに膨大な電気代を払うのはリスクであり、正規の仕事でコツコツとインセンティブもらった方が確実に稼げていいよね、というマイナーの心理が働いて結果として不正が発生にしくくなっているともいえます。

しかし、PoWには課題があります。

- 課題
    - 悪意のあるノードが全マイナーの半分以上のCPUパワーを手に入れることに成功した場合、理論上改ざん可能になる（51%攻撃）
    - マイニング競争に勝つために膨大な電力を消費する（＝エコじゃない）

マイニングファームと呼ばれるマイニング専門業者のデータセンターでは、専用チップを備えた剥き出しのコンピュータが所せましと並び、ものすごい音と熱を発生しています。
bitcoinのマイニングでは、小さな国と同じくらいの電気代を消費しているともいわれています。
当然ながら個人がマイニングに参加するのは現実的な話ではありません。

## Proof of Stake（PoS）
- 特徴

PoWの課題を克服するアルゴリズムとして生まれました。
CPUパワーに関係なく、**資産を保有している量が多ければマイニングに成功しやすくなる**というものです。
取引を承認する人をランダムに選び、選ばれる確率を資産の保有量に比例させておくという仕組みになっています。
簡単にいえば多くの資産を持っているほどくじ引きをたくさん引けて、当たりを引いたら取引を承認できる、という感じです。
CPUに膨大な計算をさせる必要が無いので、PoWに比べると非常に環境にやさしいといえます。
また、PoWでは51%攻撃のリスクが課題でしたがPoSではこれが起こりづらいです。なぜならば、PoSで51%攻撃を行うには大量の資産を保有していなければならないので、それまでに多くのコストをかける必要があります。多くのコストをかけた人物は、自ら資産価値を失うことになりかねない不正をしようとは思わないでしょう。その心理がガバナンスになっているというわけです。

一方で以下のような課題が指摘されています。

- 課題
    - 資産の保有量に応じてインセンティブがもらえるため、貧富の格差が生まれてしまう
    - 多くのコインを保有するという行為自体がモチベーションとなり、通貨の流動性を損なう恐れがある

## Proof of Importance（PoI）
- 特徴

PoSの課題を克服するアルゴリズムとして生まれました。
資産の保有量に関係なく、**参加者の重要度が高ければマイニングに成功しやすくなる**というものです。
重要度は資産の保有量と取引によって決まり、取引の評価は、**いかに通貨の流動に貢献したか（沢山の相手と取引したか)で**決まります。
PoIでは流動性が向上するため貧富の差が極端に大きくなることはないというメリットがあります。

- 課題
    - ハーベスティング（PoIでインセンティブを得ること）の参加条件を満たすために一定量の資産を保有しなければならない
    
結局のところ富裕層が力を持つ構図になってしまうじゃないか、という指摘です。

どのアルゴリズムにも一長一短あるということが分かりますね。
これまではPoWから派生したアルゴリズムを紹介しましたが、独自の設計思想でて生まれたアルゴリズムもあります。

## Proof of Consensus（PoC）
- 特徴

Rippleが採用している中央集権型に近いアルゴリズムです。
特徴は
バリデータと呼ばれるごく一部の限られたユーザーが取引を承認することができ、バリデータどうしが互いを認可しあい、80%が承認すると取引が合意されるというものです。
現状では、このバリデータの大半がリップル社の関係者で構成されていることから、リップルは中央集権的だといわれることが多いです。

- 課題
    - バリデータは基本的には各金融機関がその役割を担っている
    - 中央集権的である

こちらはRipple独自のアルゴリズムと考えてよいでしょう。

## Proof of Authority（PoA）
- 特徴

EthereumとParity Technologies社の共同設立者であるGavin Woodによって発明されました。非常にシンプルで高速なコンセンサスアルゴリズムになっています。プライベートなEthereumプラットフォーム上で利用されることを前提としており、あらかじめ決めたバリデータと呼ばれる承認アカウントだけがブロックを作成できるようにしています。バリデータは一定の時間（デフォルトは5秒）毎に権利を得て、ブロック生成を終えるとソフトウェアの機能により自動的に次のバリデータに権利が引き継がれます。


- 課題
    - 中央集権的である

Ripple同様、中央集権型と言われブロックチェーンの本来の概念に反すると指摘する人さえいます。

## 中央集権的なコンセンサスアルゴリズムはダメなのか？
上記以外にも様々な**プルーフ・オブ・なんとか**が発明されています。
さて、結局どのコンセンサスアルゴリズムが最適なのでしょうか。

私は**ブロックチェーンを使う範囲によって使い分けるべき**と考えています。

ブロックチェーンを閉じた環境、あるいは信頼のおける参加者の範囲内で利用する場合はどうでしょうか。
例えば、複数の医療機関が共通で利用するデータプラットフォームを考えます。
情報を使うのは参加する医療機関のみとします。
彼らはコストのかかる重厚長大なデータベースシステムではなく、低コストで匿名性や透明性をもったシンプルな共通基盤が欲しいと考えています。まさにブロックチェーンの標準的な特性がこれにマッチしています。

PoW、PoS、PoIなどは、そもそもパブリックなP2Pネットワーク内で、性悪説に基づき不正を防止するための仕組みになっていると考えることができます。
性善説が成り立つ範囲でブロックチェーンの特性を享受したいという目的であれば、世界中のマイナーにわざわざマイニングしてもらう必要はないのです。

パブリックな世界は性悪説に基づくアルゴリズム、プライベートな世界では性善説に基づくアルゴリズムを使うのがベストなのではないでしょうか。
逆にプライベートでも性善説が成立しない可能性がある場合は、性悪説に基づくアルゴリズムを採用すべきなのでしょう。

## 使いどころの重要な観点
重要なのはブロックチェーンを「誰が、何のために使うか」なんですね。

現在、勉強がてら個人的に独自のEtehreumプラットフォームを構築しています。
この基盤ではPoAを採用してみる予定です。

理由はいくつかあります。

現段階では、個人用途やお客様向けのデモ用に使うことが目的になるため、プライベートで性善説が成り立つ構成であることが大きな理由ですが、リソース面でみると非常に処理が軽くエコであることが採用理由のひとつでもあります。

## PoWとPoAのCPU負荷比較
独自のEthereum基盤をAWS EC2（ubuntu16.04）上でPoWモードで動作させた場合とPoAモードで動作させた場合で比較検証してみました。
実行中のtopコマンドの実行結果を見てください。
gethというプロセスがEthereumノードの実体です。
PoWはトランザクションの有無に関わらずCPUがほぼ上限に張り付いていますが、PoAはほとんどCPUパワーを必要としません。

PoWのCPU負荷

![PoW.jpg](https://qiita-image-store.s3.amazonaws.com/0/261566/dd7da2e9-d6a4-dcba-6d7d-e56cf3a854fb.jpeg)


PoAのCPU負荷

![PoA.jpg](https://qiita-image-store.s3.amazonaws.com/0/261566/10105dd4-988a-4d5e-573c-5612fd89676e.jpeg)


クラウド環境なので故障やファンの音を気にする必要はありませんが、オンプレだったら故障率、電気量ともに上がり、とても耐えられないでしょう。

## まとめ
それぞれのアルゴリズムにはメリット・デメリットがあります。
ブロックチェーンをどのようなビジネスシーンで、どのような世界（参加者）で使うのかに合わせ、適切なコンセンサスアルゴリズムを採用することが肝要だと思います。

以上、参考になれば幸いです。