(特にビットコインの)プルーフ・オブ・ワークでは大量の電力使用による環境面の負荷やマイニングプールの寡占化などさまざまな問題が指摘されています。

そこでイーサリアムはこのような問題に対処するためにPoSへの移行を進めているのです。ただ、このPoSにもさまざまな課題点があるのでそれに対処するためにイーサリアムでは純粋なPoSに対してさまざまなプロトコルの変更を行なっています。

当記事では、イーサリアムが開発しているPoSであるCasperの一種、the Friendly Finality Gadget(FFG)の仕組みやセキュリティ面についてお伝えしていきます。

 

2つのCasper

イーサリアムではコンセンサスアルゴリズムをプルーフ・オブ・ワーク(PoW)からプルーフ・オブ・ステーク(PoS)へ移行するにあったって独自に開発したPoSであるCasperの導入を進めています。

一般的にプルーフ・オブ・ステーク(PoS)は、バリデーターが賭け金をデポジットすることでその賭け金の量に応じてブロックが生成する確率が決まります。つまり、PoWは外部から計算資源を大量に投入したマイナーがブロックを生成しやすくなるのに対し、PoSでは持っている資本(コイン)を大量に投資したバリデーターがブロックを生成しやすくなるのです。

PoSについてはこちらの記事で詳しく解説しています。

参考:イーサリアムに導入予定。プルーフオブステークのメリットとデメリット

 

ただ、従来のPoSでは上記の記事でお伝えしているようにさまざまな問題点があるので、その問題を解決するために修正が加えられているのがイーサリアムのCasperになります。

さらに、このCasperにもVitalik氏が進めているthe FriendlyFinality Gadget(FFG)とVlad氏が進めているthe Friendly Ghost(TFG)の2種類があります。FFGとTFGのどちらもPoSを導入しているという点では同じなのですが、ファイナリティを得るアルゴリズムが異なります。

つまり、分岐をしてしまうブロックチェーンにおいてどのチェーンをメインチェーンと定義するか、というプロトコルが異なるのです。

 

前者のFFGは現状のPoWと新しいPoSのハイブリッド式アルゴリズムです。ブロックチェーンのファイナリティとByzantine Faukt Tolerant(BFT、ビザンチン将軍問題耐性)両方に基いて合意形成を取ろうとするコンセンサスアルゴリズムになります。

後者のTFGは、イーサリアムのPoWで使われているGHOSTというプロトコルに基いてPoSにも応用していこうというアルゴリズムになります。なので、ブロックチェーンのファイナリティに基いて合意形成を取ろうとするコンセンサスアルゴリズムであると言えます。

GHOSTについてはこちらの記事で書いています。

参考:【図解】ブロックチェーンレベルでのイーサリアムの理解

ここからはVitalik氏が考案しているCasper the Friendly Finality Gadget(CFFG)について見ていきます。(ただし、ここで紹介する仕組みは2017年11月現在最新のペーパーに基づく情報であり今後も仕様は大きく変更されていくと思われます。)

 

Casper FFGの仕組み

FFGが行うことは、分岐しているブロックチェーンのツリーからただ1つの有効なブロックチェーンを選び出すことです。

FFGはPoWとPoSのハイブリッド式コンセンサスアルゴリズムです。より正確に表現すると、下層アルゴリズムPoWの上にPoSが乗っかっているようなイメージです。具体的に見ていきましょう。

FFGが適用されているブロックチェーンにおいてもブロックの生成は通常のPoWにしたがってマイニングによってブロックがブロックチェーンに追加されていきます。FFGで特徴的なのは、ブロックチェーンの100ブロック毎に(より正確にはブロック高100毎に)「チェックポイント」が存在することです。

the Friendly Finality Gadget

(source: Casper the Friendly Finality Gadget)

この赤色で示されているr,b1,b2,b3がチェックポイントで、それらの間にはそれぞれ100ブロックあります。繰り返しになりますが、ブロックの生成は普通にマイニングよって行われます。

このチェックポイントでは、賭け金をデポジットしたバリデーター達による投票が行われます。何を決める投票なのかというと、「このチェックポイントがあるブロックチェーンは正当なブロックチェーンであるのか」という投票です。正当なブロックチェーンであると思ったバリデーターはチェックポイントで投票をし、逆に不正なブロックチェーンであると思ったバリデーターは投票を行いません。

 

そして、後に他のノード達によって事実が確認され、正しい投票をしたバリデーターには報酬が、逆に誤った投票を行なったバリデーターには罰金が課せられます(賭け金の没収)。不正な事実を見つけることができたユーザーには「発見料」が与えられるので、事実確認のインセンティブになります。

例えば、あるチェックポイントが不正なブロックチェーン上にあったときに投票をしたバリデーターはデポジットした賭け金を没収されてしまうのです。

この懲罰的な仕組みをSlasherと言い、Slasherについてはこちらの記事で詳しく解説しています。

参考:イーサリアムのPoS「Casper」で使われるSlasherとは何なのか

 

また、バリデーターの議決権はそのバリデーターがデポジットしている賭け金の量に応じて変わります。つまり、賭け金が多いバリデーターほど投票時に大きな権力を持つことになります。

チェックポイントによって投票が行われたときに、「正当な」バリデーターの2/3以上の投票が得られた場合はそのチェックポイントは正当化(justified)されます。(この2/3という確率はバリデーター人数ではなく、バリデーターの賭け金によって重み付けされていることに注意してください。もし人数で決めてしまったらシビル攻撃を受けてしまいます。)つまり、そのチェックポイントは正しいブロックチェーン上にあるという仮決定です。最終決定ではありません。

最終決定を得るためには、100ブロック先の次のチェックポイントが正当化される必要があります。この子チェックポイントが正当化された時点で、その親チェックポイントは確定(finalized)されるのです。

以下の図においては、b2が正当化されたらb1の状態は「正当化」から「確定」に変化します。さらに、b3が正当化されたらb2は確定します。

the Friendly Finality Gadget

ここまでがFFGの基本的な流れです。ブロック生成は普通にPoWのマイニングによって行われ、100ブロック毎にチェックポイントが設置されここでPoSの仕組みが使われます。PoSによって有効なブロックチェーンのブランチを選んでいるのです。FFGがPoWの上にPoSが乗っかったコンセンサスアルゴリズムであるとイメージできると思います。

従来のイーサリアムのPoWでは、GHOSTというプロトコルでブロックチェーンのメインチェーンの決定(分岐の対処)をしていましたが、FFGではバリデーターによる投票で正当なメインチェーンを決めていることが分かります。(一方、もうひとつのCasperであるthe Friendly Ghost(TFG)では投票ではなくGHOSTを使っています)

GHOSTについてはこちらの記事で書いています。

参考:【図解】ブロックチェーンレベルでのイーサリアムの理解

 

また、バリデーターがデポジットした賭け金は一定期間(例えば4ヶ月間くらい)ロックされて引き出すことができません。この期間をある程度長くすることで、より多くの人に対して投票に参加できる機会を与えることができます。

ここからはFFGでの攻撃耐性を見ていくことでさらにFFGの理解を深めていきましょう。

 

Casper FFGのセキュリティ

ロングレンジ攻撃の対策

すでにデポジットを引き出している古いブロックからブロックチェーンを分岐させ、その不正なブロックチェーンを伸ばし続けることでメインチェーンを乗っ取ってしまうという攻撃です。

以下の図では、本来のメインチェーンである青色のブロックチェーンからデポジットを引き出した攻撃者が赤色の不正なブロックチェーンを分岐させています。攻撃者はすでにデポジットを引き出しているのでSlasherによって賭け金が没収されることなく分岐させることが可能なのです。

ロングレンジ攻撃

(source: Casper the Friendly Finality Gadget)

このロングレンジ攻撃に対処する方法はさまざまなものがありますが、FFGでは以下のようなシンプルな方法で対処しています。

  • 確定したチェックポイントは絶対に取り消されない(メインチェーンの確定)

つまり、一度確定したチェックポイントがあるブロックチェーンはメインチェーンとして確定されているのでそれ以前のブロックから分岐したブロックチェーンは全て無視することができるのです。

 

致命的な状況への対処

致命的な状況とは、賭け金の1/3に相当するバリデーターが何らかの原因でネットワークに接続していなく、それ以上チェックポイントを作れなくなってしまう状況です。1/3のバリデーターがオフラインだとチェックポイントで2/3以上の投票を得ることができなくなり、FFGが動かなくなってしまいます。

FFGではこのような致命的な状況に陥らないように「inactivity leak」という方法で対処しています。inactivity leakでは、デポジットされた賭け金を少しずつ他のバリデーターに流出させることでデポジット自体のサイズを減らします。これにより、賭け金の2/3のサイズも実質的に減るので、この水準まで流出させることでFFGを再起動させるのです。

 

まだ細かいところで51%攻撃に関するセキュリティ面などで解決しなければ問題がありますが、従来のPoWにFFGを導入することで劇的に消費電力等を減らすことが可能になると期待されています。