コンセンサスアルゴリズム,PoW,PoS,DPoSを整理してみた

はじめに

皆さんこんにちは、HashHubインターンのたかてぃです。
最近はOB会(ブロックチェーンエンジニア講座の卒業生達)でブロックチェーンを用いたアプリ開発が無事終了し、ほっとしています。
さて今回の内容を書こうと思った理由は、以前からHasHubCEOの平野さんのこのブログの記事がずっと気になっていたからです。え?何が違うんだ?と思っていたので、今回を機に自分なりに調べて改めて超基礎的な知識を整理する事にしました。


PoWとは

PoWを説明する前に、よくPoWと一緒に使われる事が多いコンセンサスアルゴリズムについて再度確認したいと思います。
それぞれの単語を訳すと、コンセンサス=意見の一致や合意。アルゴリズム=演算法や方法となりますね。つまりコンセンサスアルゴリズムとは、意見の一致ないし合意の方法を示していると考えられます。今回PoWに関してはBitcoinに当てはめて、話を進めていきます。
ネットワークに参加している多数のノード達が何を合意方法としているかが、Bitcoinのコンセンサスアルゴリズムと同じ事だと考えています。Bitcoinの論文を見てみると、

The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it.

と書かれていて、これは最も長いチェーンが大多数つまりネットワークに参加しているノード達の合意を示していると考えられます。
つまり先程の主張と組み合わせると、Bitcoinネットワークに参加している多数のノード達は、最も長いチェーンを正しいチェーンとする事を合意、ないしコンセンサスアルゴリズムとしているのではないかと考えられます。

次にPoWについて説明していきますが、ここで以前の僕なら頭を抱えているでしょう。何故ならBitcoinのコンセンサスアルゴリズムはPoWと思っていたからです。ここまで調べてみて「じゃあPoWは一体なんなんだ、、!!」となり全力で焦りましたが、僕なりの解釈を拙い文章で書いていこうと思います。

PoWは結論から言うと、ブロックを作成する事に関連する設計です。つまりこの時点でコンセンサスアルゴリズムとは違う事が確認できると思います。

続けてPoWの詳細に進みます。今回も同じようにそれぞれの単語を訳すと、proof=証明。work=仕事でProof-of-Workは仕事の証明となりますね。ここでの仕事は「マイニング」として認識されています。

マイニングとは、Difficultyの値より小さくなるようなnonceの値(具体的にはそのnonceの値を含んだブロックヘッダのハッシュ値との比較)を見つける作業の事です。つまりこのDifficultyの値によって難易度が変わるという事です。この作業を終えて(つまりDifficultyより小さいブロックヘッダのハッシュ値を見つけた!)他の人の検証を無事通過すると、新しいブロックを生成出来た事になります。

もう一度論文のProof-of-Workの部分を見てみると、

The proof-of-work also solves the problem of determining representation in majority decision making.

と書かれていて、PoWは多数決での合意を決める際に発生する問題も解決する事が出来る何か、だという事がわかります。

ここで発生する問題として考えられるものは、仕事つまりブロックの生成に関する事ではないでしょうか?例えば、悪意あるノードが簡単に不正なブロックを作れたり、過去のブロックを改竄して悪い方向にチェーンを長くしたりするなどがあると考えられます。

では、PoWはそのような問題をどのようにして解決するかというと、ブロックの生成を難しくしたり改竄し辛い、またはすぐに不正がバレるなどの解決策があげられると思います。

具体的にいくつかの方法を見ていくと、例えば
・ブロックを提案できるのは1CPUにつき1つ
・前のブロックヘッダのハッシュ値をブロックヘッダに含む
・Difficultyの値をブロックの生成間隔が10分に1回なるように難易度調整
・nonce(マイニング)の正しさを検証する簡単さ
・nonceを求める為に莫大な計算リソースを必要とする事

などがあげられます。つまりこれらは、ブロック生成に関する設計(ルール)だという風に捉える事が出来ますし、悪い事をすると大損をする設計にもなっています。
よってProof-of-Workは、最初に述べた様にブロック生成に関する設計(ルール)だと思います。

更に「証明」によって、「仕事(マイニング)」を全員で検証+承認しみんなで正しいと確認した上でブロックを繋げていくことで正しいブロックチェーンを作っていきます。みんなが正しいと承認したブロックが積み重なるということは、一番長いチェーンは一番みんなが正しいと承認した数が多いと読み取る事が出来、みんなで合意するのに値すると推測出来ますね。

なので、PoWとコンセンサスアルゴリズムの2つが組み合わさる事もBitcoinネットワークが正常に機能する上で大切な事だと理解する事が出来ます。

PoWが使われているチェーン

・Bitcoin
・Ethereum(PoSへ以降予定)
・Bitcoin Cash
・Litecoin
など多くの通貨で採用されています。

メリット+デメリット

メリット

・不正を行い辛い
→不正を行うのに尋常じゃないくらいの沢山のリソースが必要で、不正をしない方がコスパが良い様に設計されているから。

デメリット

・莫大な電気を使用する
→マイニングに使用される高性能マシンを何千台以上もフル稼働させるので、それだけの電気代が膨れ上がります。またそれに関連して環境への影響も懸念されています。

・51%攻撃問題
→今では個人でマイニングに参加するのは現実的ではなく、マイニングプールを介して参加している方が多いかと思われます。もし大きなマイニングプール同士が結託すると全体の51%以上のハッシュパワーを持つので、いつか不正なチェーンの生成速度が正常なチェーンより早くなる事があるかもしれないという問題です。これにより少し過去の範囲で嫌がらせや二重払いなどの問題を引き起こせるかもしれません。


PoSとは

次は、PoWとよく比較されるPoSについて紹介していきます。
PoWと同様にブロック生成に関する設計ですが、方法が違います。PoSには、ブロック生成に関するよく知られている方法が2つあります。

1つ目は、Coin Ageという名称でコインの保有量×コインの保有期間で計算されて、この値が大きければブロック生成の成功率が高くなる仕組みです。そして成功する度にその値が小さくなる様になっています。
2つ目は、Randomized Proof-of-Stakeという名称でコインの保有量に比例して、ランダムにブロック生成者を選ぶ仕組みです。つまりコインを多く保有していればいる程ブロック生成や承認がされやすくなるという事ですね。現在はこちらの仕組みが主流になっています。
ブロック生成者が悪い事をすると自分が沢山ステークしているコインの価値が下がるので、コスパが悪くなります。

この2つが一般的に言われるPoSの仕組みですが、他にもハイブリッド(PoW+PoS)で使用しているチェーンや独自機能を追加したチェーンなどがあり、一概にPoSを採用しているチェーンが全てこの仕組みとは言えません。

無事ブロックが生成されると、ネットワークに参加しているバリデータによって検証され、承認されると新しくブロックに取り込まれます。バリデータとは、そのチェーンで定められているある一定数のコインをステークした人の事を指します。ステークとは、コインをロックする事で、ステーキングとも言われています。

PoSが使われているチェーン

・Ethereum(移行予定)
・OmiseGO
・Polkadot
・Enigma
などがあげられます。

メリット+デメリット

メリット

・PoWより電気を大量消費しない
→マイニングによる競争ではないので、PoW程のマシン電力を必要としない。

・51%攻撃への耐性
→PoSでブロックを生成するには多くのステークをした方が確率が上がります。その上で攻撃をすると自分がステークした通貨の価値が下がります。それに加え多くの通貨を購入しなくてはいけないので、そこもコストがかかりますね。この様に不正をするインセンティブが少ない事もメリットの1つとなっています。

デメリット

・流動性の低下
→PoSの仕組みでは通貨をステーキングするので、その分市場に流通する数は減る事になります。

・Nothing at stake問題
→PoWにはブロック生成時に大量の負荷を設定していますが、PoSでは権利さえ持てればあまりコストをかけずにブロックを作成する事が出来ます。これは、主にチェーンがフォークした後に起こり得る問題となっています。EthereumではSlasherという仕組みでペナルティを課していますが、PoWの様に不正を行う前ではなく、不正後に実行されるのでセキュリティ面で差が生まれる原因になる可能性があります。


DPoSとは

DPoSとPoSとの違いはブロック生成者を決める際、その人個人が持っている通貨の数だけではなく、その人に投票された数が基準となりブロック生成者に選出されます。投票が出来るのは通貨を持っている人です。

DPoSはDelegated Proof of Stakeの略で、Delegateは委任するという意味があり、あるアカウントに対して投票でブロック生成を委任するイメージです。自分が投票したアカウントがブロック生成に成功するとそのブロック報酬を受け取れる事ができます。
また、プロジェクトによってブロックを生成出来る人数が決まっている場合もあります。通貨を持っている人が更にブロック生成に参加出来ますね。

使われているチェーン

・Lisk(バリデータ数:101)
・BitShares(バリデータ数:11~)
・EOS(バリデータ数:21)
・TRON(バリデータ数: 27)
・Cosmos(バリデータ数:上位100~)
などがあげられます。

メリット+デメリット

メリット

・PoSと同様莫大な電力を使わないでブロックを生成する事が出来る
→ブロック生成には電力ではなく投票にて選ばれる必要があるので、PoSと同様に莫大な電力を使わないというメリットがあげられます。

・ブロックの承認速度の向上
→投票によって承認する人数が限定されるので、承認の工数が減り比較的早い速度でブロックを生成する事が出来る様になっています。またそのお陰でフォークも起こりにくくなっています。

デメリット

・ブロック生成時の不正
→ブロック生成者の人数が少なかったり、デリゲーターやバリデータ達が結託するとブロック生成を意図的にコントロールする事ができる可能性が高くなります。


まとめ

今回は超基礎的な知識の整理をしました。この様に、知識のアップデートや見直しをしないと間違った認識で使っているかもしれない場合があると感じたので定期的に整理していきたいですね。


お知らせ

■ステーキング事業の提供を始めました!
7月からHashHubでは、Cosmos,Tezos,IOSTの3つのトークンをステーキング出来るサービス「Sanka Network」を提供し始めました。本サービスのご利用をご検討の方は、下記のWEBサイトからお問い合わせください。

Sanke Network:https://www.sanka.network/

■fressetsは積極的に採用を行っています!詳細は下記のリンクからご確認下さい。
Link: https://fressets.com/careers/careers-416/
Link: https://fressets.com/careers/careers-0/

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント
詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

Blockchain Engineer Blog

This Blog is for all Blockchain Engineer

冨澤 宝斗 (Takato Tomizawa)

Written by

琉球大学2年次 物理専攻 | ブロックチェーン | 今休学して東京にいます

Blockchain Engineer Blog

This Blog is for all Blockchain Engineer

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade