PocketWPは、暗号資産(暗号通貨/仮想通貨)の情報を
整理・ストックするサービスです(β)
Proof Of Work - PoW(プルーフオブワーク)
edit 編集

Proof of Work(通称 PoW)はビットコインや現在のイーサリアムなどで利用されるコンセンサスアルゴリズムであり、マイニングの中核となる主要技術である。

Proof of Work(プルーフオブワーク, PoW)は、ビットコインやイーサリアムなどのブロックチェーンのブロック確定のために利用されるコンセンサスアルゴリズムである。元来はスパムメールを防ぐ技術である。

0. 前提知識を簡単解説 | コンセンサスアルゴリズム/ブロック/暗号学的ハッシュ関数

いきなり見出しにヤバそうな高圧的な単語が3つ並んでいるが安心してほしい。まずここの「0.前提知識を簡単解説」ではこの3つの単語について、理解できるように極力「簡単に」紐解くことに務める。

もしこれら3つの単語を知らなかった場合。離脱せずに、じっくりスクロールして読み進めてほしい。(どうしてもPoWを理解するためには、この3つの単語への理解は、ごまかそうと思っても不可避なので..。)

前提①|コンセンサスアルゴリズムとは「ブロックを作成する作成手法および繋げる手法」を指している。

コンセンサスアルゴリズムとは、ブロックチェーンの基本単位である「ブロック」を作成させる際に、どのような手法で作成するかの方法全般を総称している。一言で表現するとコンセンサスアルゴリズムは「ブロックチェーンのブロックの作成手法および繋げる手法」であると言える。

このブロックの作成方法は、プロトコルによって異なってくる。ビットコイン(Bitcoin)、イーサリアム(Ethereum)、イオス(EOS)、ネオ(NEO)など、プロトコル系暗号通貨には様々な種類が存在するが、プロトコルそれぞれでブロックの作成方法が異なってくる。

プルーフオブワーク(Proof of work、PoW)はこのコンセンサスアルゴリズムの一つである。現在このPoWを採用しているのが「ビットコイン」と「イーサリアム」である。

そして、「ビットコイン」や「イーサリアム」において、このProof of work(プルーフオブワーク、通称"PoW")はブロックの作成と前後につなげるために非常に重要な役割を果たしている。

そして、ブロックを繋げる手法こそが、プルーフオブワークであるため、理解するためには「ブロック」の最低限の理解が必要である。次はその「ブロック」について簡単に解説する。

前提②|ブロックチェーンの「ブロック」は「データの塊」であり、ブロック同士を前後に繋げる役割を担っている。

ブロックを一言で言うと「データの塊」と表現できる。

ブロックチェーンは、データをブロックという「箱」に格納し、そのブロックを確定させ、そのブロック同士をコンセンサスアルゴリズムで定められたルールで繋いでいくことで、過去のデータの改変を防ぐことができるという仕組みとなっている。

このデータの塊が一度確定され、そこからブロックが繋がっていくと、過去のデータを改変することが難しくなる。

ブロックに格納されるデータは具体的何を指すのか。抽象度を上げて表現すると「データの変更要求(Stateの変更要求)」であると言える。

ビットコインにおいては「AさんからBさんに10BTCを送金する」といったような送金情報。イーサリアムで言えば「契約の実行日時を18年4月20日18:00:00から18年4月21日18:00:00に変更してほしい」といった要求。これが格納される対象となるデータの正体だ。このデータをブロックチェーンでは「トランザクション」や「メッセージ」と表現する

データをどう言う基準でブロックに格納し、どういった方法で繋げていくのか?ここがコンセンサスアルゴリズムが担う役割である。

💡【より「ブロック」について知りたければ】

本用語「プルーフオブワーク」を読み進める前に、まず「ブロックチェーン」および「ブロック」についての概念を理解するとより理解しやすくなると思います。「ブロックチェーン」の解説については現在執筆中ですが、その代わりに、下記スライドをご覧いただけると「ブロック」についてイメージしやすくなるかと存じます。(一応簡単ではありますが本記事でも「ブロック」については簡易的に解説しています。)

【スライド】ゴリ学習メモ01-03:ビットコインとは何か

前提③|Proof of Worksは暗号学的ハッシュ関数の一方向性を利用した技術である。

いきなり難しい単語が連続した。「暗号学的ハッシュ関数」や「暗号学的ハッシュ関数の一方向性」という単語。

これはProof of worksを理解する上で欠かせない要素であるため、一見難しそうであるが、理解してもらいたい。内容は極力簡単であるため、以下にその概要を記述する。(なお、上記の2つの単語のリンク先にはそれぞれの解説を詳細に、図解を用いて記述しているため、時間に余裕があったらそちらもご覧ください。)

③-1. 暗号学的ハッシュ関数を秒で理解する。

暗号学的ハッシュ関数を端的にいうと「入力した文字列を、暗号学的な手法によって同じ長さの文字列に変換する技術」であると表現できる。

要はどんな長さの「入力」がきても、「出力」される文字の「長さ」は一定であるという技術である。

ひどい言い方かもしれないが、そういうものだ、そういう技術だ、と思って一旦は飲み込んで欲しい。

また暗号学的ハッシュ関数には面白い特徴がある。「入力」で同じ文字を入れたら「出力」される文字は同じ。

逆に違った文字を「入力」したら、「出力」される文字は別になるという特徴がある。

こう言ったように、ハッシュ関数は入力した文字を、全く別な同じ長さの文字列に変更するという技術であり、全く別な文字を入れるとその出力結果は全く異なるものであるというものであることをまずは理解して欲しい。

③-2. 暗号学的ハッシュ関数の一方向性とは何か。

どんな文字を入れても、同じ長さの文字になる。暗号学的ハッシュ関数は魔法の技術映るかもしれない。ただし、ハッシュ関数には忘れてはならない大きな特徴がある。

「出力」から「入力」を推測するのは無理なのである。要はハッシュの逆算ができないのである。

暗号学的ハッシュ関数にはこう言った特徴がある。

一見意味のなさそうな技術を解説しているように見えるが、これを応用したものこそが、Proof of Work(プルーフオブワーク、PoW)なのである。

そして、最後に解説した、暗号学的ハッシュ関数の「出力」から「入力」ができない、つまり「暗号学的ハッシュ関数の一方向性」という特徴こそが、プルーフオブワークを理解する鍵となる。

💡ちなみに暗号学的ハッシュ関数を整理して理解したい場合は、用語集の下記記事をご覧ください。

【用語集】暗号学的ハッシュ関数

まとめ|前提知識を一旦まとめると

前提だけでだいぶ長くなってしまったが、これらの3つの前提知識こそが、Proof of Workを理解するために重要な要素になる。大事なことなので改めて要点を以下にまとめる。

  • 前提① | コンセンサスアルゴリズムは「ブロックチェーンのブロックの作成手法および繋げる手法」である。
  • 前提② | ブロックチェーンの「ブロック」は「データの塊」であり、ブロク同士を前後に繋げる役割を担っている。
  • 前提③ | Proof of Worksは暗号学的ハッシュ関数の一方向性を利用した技術である。

という3つの前提知識を踏まえた上で、以下に本題であるプルーフオブワークの仕組みを解説する。

1. 概要理解 | Proof of Work

ビットコインで理解するProof of Work(プルーフオブワーク, PoW)。

ビットコインでは、Proof of Worksは、ブロック作成および、ブロックを前後につなぐためのコンセンサスアルゴリズムとして採用されている。

前述の暗号学的ハッシュ関数の紹介では、暗号学的ハッシュ関数は「入力」を元に同じ長さの「出力」を取るという特性を説明した。ビットコインなどのPoWを採用しているプロトコル系ブロックチェーンでは、この特性を生かし、ブロックを前後につなげている

ブロックを前後に繋げるキープレイヤー、ブロックヘッダー(Block Header)。

ブロックには「データ」の他に、「ブロックヘッダー(Block Header)」と呼ばれるデータ保存領域がある。ブロックヘッダーには、ブロック内部のデータ群を要約したデータと現在時刻などの基本情報を含め、合計6つの種類のデータを保有している。

この6つを足し合わせた文字列を「入力」として、「出力」となるブロックのハッシュ値を生成する。この6つのパラメータはどれか一つの値が一文字でも違っていれば、暗号学的ハッシュ関数の特性上、出力値は全く異なってくるという特徴がある。

その6つのデータの一つが、前のブロックのデータのブロックヘッダーの出力値であるハッシュ値、「PreviousHash(プレビャスハッシュ。"前のハッシュ値"の意。)」であり、これがブロックを前後につなぐ役割を担っている。

合計6つのパラメータの内訳はこうだ。

  • ❶ Previous Hash (プレビャスハッシュ、PrevHashとも)
    前のBlockHeaderのハッシュ値。つまり前のブロックのこの6つの値を入力にとって、暗号学的ハッシュ関数をかけた出力値。
  • ❷ Timestamp (タイムスタンプ)
    マイニングの際にマシン内部で取得した日付時刻。マシン内部では細かな秒まで割り振られた指定の形式の文字列になっている。別名Unixタイムスタンプ。
  • ❸ Verison(バージョン)
    現在のビットコインのバージョン。余談だが、マイニングを動かしているノードのビットコインのソースコードが古い場合、他ノードでこのバージョンが確認されて、違っていればブロックを確定しないといったルールが存在する。
  • ❹ Nonce(ナンス)
    ここがマイニングを行う箇所であり、暗号学的ハッシュ関数の一方向性を利用した、PoWのキモとなるポイント。マイニングを行うノードは、指定されたハッシュ値を得て、ブロックを作成し、報酬を得たいがためにここの文字列の入力に四苦八苦している。詳細は後述。
  • ❺ Difficulty Target(ディフィカルティターゲット)
    現在のビットコインの採掘難易度(マイニングの難易度、Nonceを特定する確率)を格納する。これもVersionと同様に、間違った値をベースにした上でブロックを作成していた場合、そのブロック生成は認められないものとなる。
  • ❻ Markle Root(マークルルート)
    ブロック内部に格納されている全てのデータ、すなわち格納されている全てのトランザクション一つ一つに暗号学的ハッシュ関数をかけ、すべて一定の長さの文字列に出力した後、それをマークルツリー(マークル木)というアルゴリズムで足し上げた、いわば「ブロック内部トランザクションの要約値」。ここは説明すると非常に長くなるので、要約値とだけ覚えておいてほしい。

これら❶〜❻の6つのパラメータを暗号学的ハッシュ関数にかけ、固定長のハッシュ値を得る。さらに次のブロックでは、そのハッシュ値を6つのパラメータの一つである「Previous Hash」として「入力」の一つとり、また次ブロックの6つのパラメータを暗号学的ハッシュ関数にかけつなげていく..。

上で説明したように、暗号学的ハッシュ関数の「入力」一文字でも違った文字列を入力値に取った場合、ハッシュ値は全く異なるという特性を持つため、仮に最新のブロックから10個前のデータを改ざんしようとした場合、その次のブロックの暗号学的ハッシュ関数の「入力」である「Previous Hash」の値が変わり、そして次も次も..と連鎖的にすべてのハッシュ値を変更しなくてはいけなくなる。これがブロックが前後につながっている、という意味の正体である。

なぜブロックが前後に繋がると改ざんがされないのか。

さらにデータの改ざんという視点で、ブロックが前後に繋がるという意味を捉えてみよう。仮に、10個前のブロック内部のデータを改ざんしたブロックがあり、その後のブロックのハッシュを書き換えずに、それが正当なブロックチェーンだ!という信念のもと、全世界に己がもつ不当なブロックチェーンを広めようとしたノードがいたとする。そうした場合、ビットコインを動かす全世界のノードがそもそもそれはブロックの条件に当てはまらないのだとみなし、ルール上、それは正当なデータではない、と判断し、自身達のノード取り入れない。

そもそもビットコインのブロックチェーンでは、ノードがデータが正しいかの検証を自身達で行うことはもちろん、最長のチェーンを正当なものだとみなすというルールがある。前述の10個前ブロック改ざんチェーンは、ルール上現在の最長ブロックの-10のチェーンの長さしかないブロックチェーンだとみなされ、そもそも無視される。こうして、結果、改ざんされたデータを持つ、不当なチェーンは採用されない。こういったルールで運用されるが故に、ブロックチェーンはデータの改ざんを防ぐことに成功している。

でも計算し直せばデータの改ざんはごまかせるのではなかろうか。

ここまでで、ブロック同士が前後に連結することの意味。そして6つのパラメータを暗号学的ハッシュ関数の「入力」に取るということを説明した。

なんとなく、ブロックは前後に連結するぞ、改ざんが防止されているぞ、ということはわかったはずだ。だが、まだここではProof of workの話は出てこない。

Proof of Workの話にいく前に、あえて意地悪な思考実験をしよう。10個前のブロック内部のトランザクションのデータを書き換えたとして、それが影響してその後に続く「PreviousHash」の値がすべて書き換わったとしよう。確かにそのあと続くブロックのハッシュ値は変わった。変わったけれども、高速で計算し直せば、どうにかごまかせるとは考えられないだろうか?ビットコインはブロックチェーンは最長のチェーンを正当なチェーンとしてみなすルールがあると説明したが、ではその最長のチェーンに高速で追いつけば、なんとかごまかせるんではなかろうか?

だが、ビットコインではこれができないようになっている。現在のハッシュパワーを考えると昔のブロックに遡ってデータを書き換えて、それを正当なチェーンとして流通させることはとうてい不可能な仕組みになっている。

なぜか。実はProof of Workの妙義はそこにある。

本題|Proof of Workとは - 暗号学的ハッシュ関数の一方向性を逆手に取ったブロックチェーンの妙義。

ブロックヘッダーには6つのパラメータがあり、これを「入力」値にとることでハッシュ値を「出力」して、前後にブロックをつなげていくことは説明した。

この6つのパラメータが重要になってくるため、再度ここに図を掲載する。

この6つのパラメータのうち、5つはブロックを作成する前に情報は確定している。「❶ Previous Hash」は前のブロックの値。「❷ Timestamp」はブロック作成の現在の時刻。「❸ Verison」や「❺ Difficulty Target」もビットコインシステムのなかで定められ導き出された値。「❻ Markle Root」はトランザクションの要約値であるから、ブロック内部に入れることができる上限までのトランザクションを入れてしまえばその値は確定する。

さてブロックを作成するか、としたときに、一つだけ決まっていない値がある。「❹ Nonce(ナンス)」だ。これはビットコインシステムに参加するノードが入力。どういう値を入力するのか?これは、「❶〜❻を「入力」にとって、ビットコインにて決められた形のハッシュ値で出力される」形式になるように、「❹ Nonce(ナンス)」を探し求め、入力するのだ。いわばこれが世に知られる、マイニングというものである。

言い直すと、「❶〜❻」の値を暗号学的ハッシュ関数にかけた時、出力がビットコインで決められた形式のハッシュ値になって、かつ、そのブロックがブロックチェーンの最長の地点にいればそのブロックは採掘されたとして、ビットコインネットワークで存在を認められるのである

では「❹ Nonce(ナンス)」を見つけるためにはどうすればいいのであろうか。これは、力技でやるしかない。暗号学的ハッシュ関数の一方向性により「出力」から「入力」は類推できないということを説明した。類推によるハッシュの逆算はできない。類推はできないのだから、一個一個可能性のある文字列をさがしてきてひたすら打ち込んでいく。

だが、暗号学的ハッシュ関数の出力値は2^256+1(2の256乗+1)通りある。そしてその入力は無限大だ。膨大な時間をかけなければ完全一致の該当の出力を見つけることは現実的ではない。

そこで、ビットコインでのProof of workでは、ハッシュの逆算対象の出力の「範囲」を指定するような形式にしている。その範囲におさまるハッシュ値を出力するようにに「❹ Nonce(ナンス)」を生成すれば、ブロックとして認められるといった形式をとっている。

マイニングは、まさにこの「❹ Nonce(ナンス)」を見つける行為であり、全世界のマシンがこの「❹ Nonce(ナンス)」を見つけることに血眼になっている。ナンスを見つけ、ブロックとしてネットワークに認められれば、マイニングに成功した人に報酬が与えられる仕組みとなっている。

ここまでの情報をつなぎ合わせ、改めてマイニングを図解としてイメージしやすく整理すると、下記になる。

これは、全世界規模のくじ引きに等しい行為で、引き当てるのは確率の問題でしかない。そのため、大量のGPUなりASICなりを使って、自分の「計算量」を確保し、マイナーが己のくじ引きの当選確率をあげようと躍起になっているのだ。

なお、ビットコインネットワークでは、このくじ引きの難易度は動的に変更される。これは俗に言う採掘難易度だが、ビットコインネットワークではブロックの生成間隔が10分間隔に収まるように調整されている。全世界の現在の「計算量」を考慮し、計算量が大きければ当選確率が下げ、計算量が少なければ当選確率をあげる、といった調整が2016ブロックごとに計算され、調整されている。

広義のProof of Work - コンセンサスアルゴリズムとしての側面

ブロックチェーンのブロック確定の仕組みから、Proof of Workを紹介してきたが、Proof of Workという言葉が一体何をさすのか。

多くの場合、ブロックチェーンにおけるコンセンサスアルゴリズム、仕組み全体としての総称としてProof of Workという言葉が使われている。つまりは、上記で説明したように、Nonceを力技で見つけ、ブロックを生成し、繋げていく仕組みのことを指している。

狭義のProof of Work - 任意の実行に対して計算量を担保する行為

より狭義に、Proof of Workを捉えるならば、指定した範囲のハッシュ値を生成するためのハッシュの逆算行為である、であると言える。範囲を指定するということは、そこに逆算でたどり着く確率をコントロールするという行為である。

10回施行すれば、1回は当選するだろう。10000回施行すれば1回はたどり着くだろう。こういった確率のコントロールは、裏を返すと、10回計算しないとたどり着けません、10000回計算しないとたどり着けません、といった必要な計算量を担保をすることであるという事であるとも言える。

つまり、Proof of Workはある行為に対しての計算量を担保する仕組みなのである。これが「仕事の証明」いう名前の所以だ。

ブロックチェーンからProof of workを捉えてみると、過去のブロックには一定の計算量に基づいたデータ確定がなされており、これは過去のデータ改ざんを防ぐという意味で非常に有用な仕掛けとなっている。

先ほど、下記のような思考実験をした事を思い出して欲しい。

  • 「10個前のブロック内部のトランザクションのデータを書き換えたとして、それが影響してその後に続く「PreviousHash」の値がすべて書き換わったとしよう。確かにそのあと続くブロックのハッシュ値は変わった。変わったけれども、高速で計算し直せば、どうにかごまかせるとは考えられないだろうか?ビットコインはブロックチェーンは最長のチェーンを正当なチェーンとしてみなすルールがあると説明したが、ではその最長のチェーンに高速で追いつけば、なんとかごまかせるんではなかろうか?

結論からいうと、十分な計算量をもつチェーンにおいては、これはできないのである。なぜならば、ビットコインブロックチェーンにおいては、過去のブロック群が、全世界のマシンで10分間の計算が必要になるように計算量が調整されており、それが10×10分、つまり100分の計算量が担保されている。多くのユーザーは新しいブロックを採掘し、報酬を得る事に血眼になっている。数人のわずかな人間だけで、全世界が成立させた100分の計算量を凌駕し、最長のチェーンを生み出すことは事実上不可能になっているのである。これこそがProof of Workの計算量の担保の妙義であり、また、多くのユーザーを最長の先端ブロック採掘に目を向けさせるような、ビットコインネットワークにおけるインセンティブの使い方の妙義でもあるのだ。

51%攻撃

ただし十分な計算量を持たない独自チェーンの場合、これは発生しうる。

例えばCTC、DTCというチェーンがあったとして、CTCは200の計算量で支えられており、DTCは50の計算量で支えられているとする。そしてそれらはそれぞれ独自のチェーンとなっている。この場合、CTCがなにがしかの政治的意図を持って、DTCの計算量を上回る力で結託して改ざん側に回る。チェーン全体を支える計算量のうち51%が悪意あるノードに占拠されると、これは発生しうると言われている(51%攻撃、実態はもっと少ないパーセントでも可能だとも言われる)。過去Verge(XVG)はこの攻撃を受けている。

まとめ | Proof of Work

ここまでで、ビットコインネットワークの視点で、ブロックの接続の仕組みを踏まえ、Proof Of Workについて解説してきた。まとめると、下記の通りとなる。

  • ❶ ブロックチェーンの「ブロック」は、ブロックヘッダーを介して前後に繋がっている。
  • ❷ ビットコインのブロックヘッダーには6つのパラメータが存在し、その一つであるPrevious Hash(プレビャスハッシュ)が、ブロックを前後に繋げる重要な要素となっている。
  • ❸ 過去のブロックを改ざんすると、そのあとに続く全てのPreviousHashが変更となってしまうため、これが改ざん防止に一役買っている。
  • ❹ ブロックヘッダーの未確定要素であるNonce(ナンス)に、マイニングノードが数字を入れて、暗号学的ハッシュ関数にかける。その「出力」が、指定の範囲の文字列になっていた場合、ブロックは確定する。マイニングとはこのNonceを試行し、指定の「出力」になるように導き出す行為を指している。
  • (広義のProof of Work) ❶〜❹が、ビットコインのコンセンサスアルゴリズムの全体像であり、多くの場合これを総称しProof of Workと呼称する。
  •  (狭義のProof of Work) 一方、Proof of Worksを狭義に考えると、❹のマイニングのハッシュの逆算行為であると言える。これは確率をコントロールすることで、データの確定に計算量を担保する仕組みであると言える。

Proof of Work(プルーフオブワーク、PoW)という言葉は、文脈によって指している範囲が異なっている。文脈によってコンセンサスアルゴリズムなのか(広義)、あるいは計算量を担保する行為なのか(狭義)が異なってくる。

*なお、広義と狭義は理解を簡単にするために、筆者が勝手に定義した内容である。

2. 補足 | Proof of Workの歴史

Proof of Work(プルーフオブワーク)は元々は、スパムメールを防止するための技術であった。

実はProof Of Workは、元々はスパムメールを防止するための技術であった。その歴史は、1993年に遡る。Dwork, CynthiaNaor, Moniによって提唱された。

メールは非常な軽微な電気代を除けば、ほぼタダで誰にでも送信できる。スパムは誰にでも大量に送信できてしまう。この送信にたいして、計算という負荷を与えることで、送信可能な頻度を押さえ、スパムメールを送るコンピュータの送信効率を劇的に下げることを試みた。

これもビットコインのマイニングと同様に、一定の範囲の出力を出すような入力を出すことを送信者に義務付け、仮にその入力にマッチしていた場合、メールの送信が可能になるという仕組みだ。

一方の受信者は対応メールソフトを持つ必要があり、Proof of Worksによるハッシュの逆算を行なっていないメールはそもそもソフト内部に受信しないという実装をしていた。

この仕組みは一部において普及したものの、世の中に広く浸透することはなかった。

元々はこのアイディアはスパムメールへの怒りから着想されたアイディアなのだが、「ある行為に対して確率をコントロールして、必要な計算量を担保する」という考え方は、海岸で貝殻を見つける行為に等しい、つまり通貨を見つける行為に等しいのではという気づきも生まれた。この行為によって生み出された文字列などは、HashCashとも言われる。

のちの分散デジタルネットワーク上における価値移転に関する様々な論文に多大なる影響を与えたアイディアでもあった。

(また、PoWから始まるブロックチェーン誕生までの歴史は下記スライドにまとめているので、興味があったらこちらもご覧ください)

【スライド】ゴリ学習メモ01-01

3. 問題点 | Proof of Workの問題点

電気代の無駄

確率をコントロールすることで、ブロックの確定に対して計算量が必要であるということは説明したが、ブロック確定以外に使われる計算は全くの無駄となってしまう。

金を採掘し、流通させるよりはそのコストは低いと言われているものの、この無駄になった計算量を他のものに使えないかというアプローチはいくつか散見されるようだ。

一方でこんな言説もあるので、注目しておきたい。 ➡︎ Nothing is Cheaper than Proof of Work

処理速度の問題と改ざん耐性の難しさ

Proof of Workは計算量を担保することによって、データの改ざんの防止に一役買っている。一方で、計算量が必要なため、単位時間における処理の量が通常のコンピュータの保存処理に比べ時間がかかってしまう、という問題を抱えている。

逆に処理できる量を増やすために、必要計算量を減らした場合、ブロックを逆に辿られてしまい、データの改ざんへの耐性が弱くなってしまうという問題もある。またチェーンの分岐が起こりやすいという問題も抱えている。

イーサリアムの場合、ブロック作成速度は15秒と、ビットコインの1/40の速度でブロックが作成されていく。イーサリアムの場合はGhostProtocol(ゴーストプロトコル)という実装によって、都度発生するチェーンの分岐をまとめていく事を実現している。

他処理速度を上昇させるための技術との相性

イーサリアムでは、その処理速度を改善するために様々なアプローチが取られている。

一つはShadingという技術。全世界のマイニングノードが、同じデータをブロックに格納し、ブロックを生成するといった今の手法をとるのでなく、ブロックに格納するデータを分散して、同時並行的に別々のブロックを生成するというアイディアである。だがこれは必要計算量が分散されるという問題を抱えることとなり、過去のブロックに対する改ざんに対して耐性を弱くしてしまうという弱点がある。

もう一つはSidechainという技術。これはそもそもブロックに書き込むというデータをそもそも減らすという取り組みで、アプリケーションの処理に関するチェーンをメインチェーンで処理させず、自前の経済圏で保有するサイドチェーンに逃すというアプローチだ。まだ目下この技術は研究が進んでいる途中であるが、サイドチェーンの攻撃耐性にたいするチェーンのガバナンスをどう解決するか、という問題を抱えている。

4. Proof of workまとめ

Proof of Workという言葉には、大きく二つのスコープがあるということを理解する。

①広義のProof of work(独自に定義した考え方)
  •  (広義のProof of Work) ❶〜❹が、ビットコインのコンセンサスアルゴリズムの全体像であり、多くの場合これを総称しProof of Workと呼称する。
  • ❶ ブロックチェーンの「ブロック」は、ブロックヘッダーを介して前後に繋がっている。
  • ❷ ビットコインのブロックヘッダーには6つのパラメータが存在し、その一つであるPrevious Hash(プレビャスハッシュ)が、ブロックを前後に繋げる重要な要素となっている。
  • ❸ 過去のブロックを改ざんすると、そのあとに続く全てのPreviousHashが変更となってしまうため、これが改ざん防止に一役買っている。
  • ❹ ブロックヘッダーの未確定要素であるNonce(ナンス)に、マイニングノードが数字を入れて、暗号学的ハッシュ関数にかける。その「出力」が、指定の範囲の文字列になっていた場合、ブロックは確定する。マイニングとはこのNonceを試行し、指定の「出力」になるように導き出す行為を指している。
②狭義のProof of work(独自に定義した考え方)
  • (狭義のProof of Work) 一方、Proof of Worksを狭義に考えると、❹のマイニングのハッシュの逆算行為であると言える。これは確率をコントロールすることで、任意のデータの処理に計算量を担保させる仕組みであると言える。

なおそもそもProof of workはスパムメールを防止する1993年に生まれた技術であり、メールの送信に対し一定の計算量を利用するということを義務化した仕組みである。メールの送信間隔を制御し、スパムを送信することを防ごうとした。こう言った歴史的背景があるゆえ、本来の意味ではこちらの「任意のデータの処理に計算量を担保させる仕組み」に近いことも理解する。

一方Proof of worksには大きく3つのデメリットが存在していることも理解する。

  • 電気代の無駄
  • 処理速度の問題と改ざん耐性のジレンマ
  • 他処理速度を上昇させるための技術との相性の難しさ


Proof of worksの解説はこれで以上となります



#PocketWP 一覧

#ゴリ学習メモ 一覧

PocketWPについて

暗号資産(暗号通貨, 仮想通貨)やブロックチェーンは理解が難しく、また一次情報の多くはPCに最適化されている状況にあります。PocketWPでは、下記の3点のアプローチによってその問題を解決しようとしています。
  • ・SmartPhoneFirst - スマホで最適化したスライド/UI
  • ・Stockable - 流れてしまいがちな情報を蓄積し、共有できる
  • ・Followable - 追いかけるべき情報源がわかる
将来的には共同で編集できる仕組みなども設計中です。 暗号資産・暗号通貨の価値を広げるには、良質な情報を読みやすく噛み砕くことが必要だと思っています。 よろしければご意見をこちらからお寄せください (お問い合わせフォーム)
運営者情報① : IXTgorilla
IXTゴリラ
@IXTgorilla
Twitterにて #PocketWP #ゴリ学習メモ なるスマホに最適化した暗号資産の学習情報をスライド形式にて発信しているゴリラ。 これまではTwitterのみの発信を行なっていましたが、蓄積される場所が欲しいという声にお答えし、Web化を行なってみました。
運営者情報② : CryptoGorillaz
暗号通貨に関する情報を共有するコミュニティ。当初はコラ画像などをつくる集団だったが、暗号通貨の魅力や将来性にほだされ、日夜暗号通貨に関する情報共有を行なっている。(IXTゴリラもここに所属しています)

寄付/投げ銭はこちら

  • Ethereum(ETH) / ERC20トークンでの投げ銭
    0x77535cb08CF5Ba3B85A34A3B037766103226c783