ブロックチェーン基礎理解 Part 2: Proof of Work & Proof of Stake

Loom Network Japanese
Loom Network JP
Published in
9 min readOct 24, 2018

本記事は、Understanding Blockchain Fundamentals, Part 2: Proof of Work & Proof of Stake(Georgios Konstantopoulos) の翻訳です。万一誤訳などありましたらPrivate Note機能でお知らせ下さい。

このブロックチェーン基礎理解シリーズの記事は以下となる:

  1. Part 1: ビザンチン・フォールトトレラント性
  2. Part 2: Proof of Work & Proof of Stake
  3. Part 3: Delegated Proof of Stake

パート1では、ビザンチン将軍問題についてどのようにビザンチン・フォールト・トレラント性が達成されるか、そしてこの全てがどのようにブロックチェーンに関連しているかを論じた。

前の記事中のアルゴリズムは、実際にビザンチン・フォールト・トレラント性を達成するソリューションである。しかしながらこのソリューションは十分効率的なものではなく、さらに不誠実な者の変化率がネットワークの3分の1より少ないという制約がある。

Lamport, Shostak及びPeaseにより提案されたアルゴリズムを使ってビザンチン将軍問題を解決する実行時間 (n = 参加者数、m = 反逆者の数)

こうして、我々はコンピュータ・サイエンスにおける典型的な質問へと至るのだ:

もっとより良くできないのか?

この記事のトピックで、ビザンチン・フォールト・トレラント性を達成する別のアルゴリズムについて議論していく。

注: 簡略化している点をお含みおきいただきたい。これらアルゴリズムは、その背景に多くの複雑な研究がなされている。内容を進めていく中でリンクをご紹介するので、ご興味のある読者の方はご自身で調査いただきたい。

ブロックチェーンは、次のブロックの中身を決めるリーダーを選出するためにコンセンサス・アルゴリズムを使用している。

このリーダーは、他のピアが中身の有効性を検証できるようにブロックをネットワークにブロードキャストする責務もある。

Proof of Work (PoW)

これは最も一般的なアルゴリズムで、BitcoinやEthereumといった通貨で使用されているが、それぞれに異なった点がある。

続きをやっていく前に、非技術者の読者の方向けに:

ハッシュ関数とは、任意サイズのデータを固定サイズにマッピングするために使うことができる関数である。¹.

ハッシュ関数が安全なものであれば、その出力はランダムなものと区別ができない。

例:
keccak256("hello") = 1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8
keccak256("hello1") = 57c65f1718e8297f4048beff2419e134656b7a856872b27ad77846e395f13ffe

Proof of Workにおいて、参加者がリーダーとして選出され、ブロックチェーンに追加される次のブロックを選ぶためには、彼らは特定の数学的問題の解を見つけなくてはならない。

仮にその数学的問題がこのようなものだとすると:

データXが与えられたとき、Xの結果に付加されるnのハッシュがYより小さい数となる数 nを見つけよ。

例 - ハッシュは以下のような出力を持つ仮想ハッシュ関数である。
Y = 10, X = 'test'
hash(X) = hash('test') = 0x0f = 15 > 10
hash(X+1) = hash('test1') = 0xff = 255 > 10
hash(X+2) = hash('test2') = 0x09 = 9 < 10 OK、解決。

使用されるハッシュ関数が暗号論的にセキュアであるとすると [1,2]、 その問題の解を見つける唯一の方法はブルートフォース(可能性のあるすべての組み合わせを試す)である。すなわち確率論的に言うと、前述の問題を最初に解いた参加者は、最大の計算パワーへアクセスできる者である。この参加者たちは、マイナーと呼ばれる。

主に以下の特性が理由で、この仕組みは広く成功している:

  1. 与えられた問題の解を見つけるのが困難であること
  2. 問題の解が与えられた際、それが正しいと検証し易いこと

新規ブロックが採掘される度に、そのマイナー(採掘者)は通貨の報酬(ブロック報酬、トランザクション手数料)を獲得し、このように採掘を続けるためのインセンティブを与えられている。Proof of Workでは、他のノーどがブロックデータのハッシュが現在の数字よりも少ないことをチェックして、ブロックの有効性を検証する。

計算パワーの供給が限られているは、マイナーが不正を行わないことの動機付けとなる。高額なハードウェアやエネルギー、そして今後の採掘利益が失われるので、ネットワークの攻撃はかなりのコストとなってしまう。

この図はBitcoin、さらに他のProof of Workを使用しているコインが、どのように悪意ある行為を防いでいるかをよく表している。

不和が起こった場合のチェーン分裂(フォークやチェーン再編など)の仕組みに関心をお持ちの読者の方には、こちらの記事をお薦めしたい。

Proof of Workは必要なセキュリティを提供するものであり、その働きは非常に良いものであることがこれまで証明されている。ただし、かなりのエネルギーを消費してしまうのだ:

ほとんど全てのアフリカ国家は(それぞれに)、BItcoinマイニング産業よりも電力消費が少ない。

Proof of Stake (PoS)

続きをやっていく前に、リーダー選挙(次のブロックを選ぶ者)をくじに例えてみよう:

くじの場合、確率論的にボブがアリスよりも多くの券を持っていれば、彼にはより多くの当選の可能性がある。

同様に:

Proof of Workでは、ボブがアリスよりも多くの計算パワーを持っていて、より多くの仕事を行うことができれば、彼の勝つ(次のブロックを採掘する)可能性は高くなる。

また同様に:

Proof of Stakeでは、ボブがアリスより多くのステーククォ持っていれば、彼の勝つ(次のブロックを採掘する)可能性は高くなる。

Proof of Stakeは、PoWのエネルギーと計算パワーの要件を取り去って、それをステークで置き換えたものだ。ステークとは、参加者がある期間にわたりロックアップを希望するある量の通貨のことをいう。彼らは見返りとして、次のリーダーになり次のブロックを選ぶことができるチャンスを、自分のステークに比例して得ることができる。NxtやBlaskcoinのように、既存の様々なコインが純粋なPoSを採用している。

PoSの主な課題は、いわゆるNothing-at-stake問題である。基本的にフォークの場合は、ステーカーは両方のチェーンでステーキングすることを妨げられず、二重支払い問題の危険性が増加してしまう。これに関して詳しくはこちらを参照してみよう。

これを防ぐために、Decredで使用されているようなPoW-PoSを組み合わせたような、ハイブリッドのコンセンサスアルゴリズムが登場した。Casper The Friendly Ghost及びCasper The Friendly Finality Gadgetで、Ethereum Foundationはセキュアで分散されたProof of Stakeプロトコルに向け、アクティブな研究を行った。

まとめ

この記事では、ビザンチン・フォールト・トレラント性を達成し現在のブロックチェーンシステムで実際に使用されているコンセンサスアルゴリズム・Proof of Work と Proof of Stakeについて論じた。

他にもPBFT(Tendermint)やDBFT(NEO)といったコンセンサスアルゴリズムも存在している。こちらでPBFTとCasperの素晴らしい比較を見てみよう。

Loom Network は、イーサリアムのハイスケーラブルなDPoSサイドチェーン構築のためのプラットフォームで、大規模ゲームやソーシャルアプリにフォーカスしています。

さらなる情報は こちらから.

LOOMトークンをステークして、PlasmaChainのセキュリティ維持に参加しませんか? やり方はこちら

あなたがブロックチェーンゲームのファンであれば、 Zombie Battlegroundをチェック!世界初・独自のブロックチェーン上でフルに稼働するPC & モバイルカードゲームです。

そしてもしこの記事をお楽しみいただけ、最新情報の受け取りをご希望であれば、私たちの プライベートメーリングリストへの登録や、TelegramTwitterGithubQiitaのフォローをお願いします!

Thanks to James Martin Duffy. Some rights reserved

--

--

Loom Network Japanese
Loom Network JP

Loom Networkは、ゲームやソーシャルアプリを中心としたEthereum DAppsのためのスケーリングソリューションを提供します。http://loomx.io/