はじめに
ついにEthereumのMergeがテストネットで成功しました🎉
それに伴ってコンセンサスアルゴリズムがPoWからPoSに変更になりました。そこで両者の違いとEthereumのPoSの動きを自分なりにまとめてみました。
PoW
Proof of Workの略。Bitcoinで使用されていることで有名。
ブロックチェーンの仕組上、取引がなされた際にその取引データは他の人に承認されてブロックに取り込まれる。
その際にブロックの承認を行うために必要な計算(Nonceの計算)があり、それを早く解き切るとマイナーに選ばれ、報酬を受け取ることができる。
しかし、電力消費量が非常に大きくため、環境に負荷がかかる・個人で行うには設備等で莫大な費用がかかる。
PoS
Proof of Stakeの略。
トークンを一定数以上ステーキング持っているユーザーからランダムに選択し(バリデーターの選出)、そのバリデーターがブロックを承認することによって報酬を得ることができる。
特徴
-
トークンを一定数有していると一定の信用があるという考え方
-
PoWのように高性能のハードウェアを必要としない
-
個人での参入障壁が下がる
Layer2ソリューションのRollup等と組み合わせてスケーラビリティの問題に対処できる
EthereumにおけるPoSの動き
バリデーターのやること
選ばれた場合→ブロックの作成
選ばれなかった場合→ブロックの検証を行う
ブロックの検証をattestingといい、「このブロックは良さそうだ」というのを証明しているイメージ。
もし、悪意のブロックに対してattestingした場合にはステークを失う。
シャードチェーン
シャーディングによってネットワークの混雑を減らし、シャードチェーンを作成することによって、1 秒あたりのトランザクションを増加させる。
64のシャードチェーンが存在し、それぞれがネットワークの状態を共有することになっている。
シャーディング
データベースを水平に分割して負荷分散を行うプロセス。
ビーコンチェーン
シャードチェーンの調整を行うチェーン。
シャードから状態情報を受け取り、他のシャードがそれを利用できるようにすることで、ネットワークの同期を保つことができる。
また、ビーコンチェーンは、バリデータのステーク入金登録から報酬・ペナルティの発行も管理する。
バリデーションの働き
シャードでトランザクションを送信すると、バリデータがそのトランザクションをシャーブロックに追加する役割を担う。
バリデータはビーコンチェーンのアルゴリズムによって選ばれ、新しいブロックを提案できるようにする。
Attestation
上記とか異なりバリデータが新しいシャードブロックを提案するのに選ばれなかった場合、他のバリデータが行ったブロックの提案に対して認証を行う。
ビーコンチェーンには取引自体ではなく、この認証に対して行われている。
各シャードブロックには少なくとも128人のバリデータが必要で、これを 「committee」と呼ぶ。
committeeにはシャードブロックを提案し、検証するための時間枠があり、それを「slot」と呼ぶ。
1つのslotには1つの有効なブロックを作成する。そのslotが32個まとまったものを「epoch」といい、1つのepochの検証が終了したらcommitteeは解散する。
その後、再び異なるランダムな参加者でcommiteeが再結成される。これによって悪質なcommiteeからシャードを保護することができる。
Crosslink
新しいシャードブロックの提案に十分な認証が得られると、ビーコンチェーンにブロックと取引が含まれることを確認する「Crosslink」が作成される。
このCrosslinkでビーコンチェーンとシャードチェーンがつながり、同期を行っている。
Crosslinkができると、そのブロックを提案したバリデータは報酬を得ることができる。
Finality
分散型ネットワークでは、ある取引が変更不可能なブロックの一部となっている場合、その取引は「Finality」を持つ。
PoSでこれを実現するために、FinalityのプロトコルであるCasperが使用される。
これはあるチェックポイントでのブロックの状態についてバリデーターに同意させるもの。
バリデータの2/3が同意すれば、そのブロックはファイナライズされる。
もしバリデータは、ファイナライズされたブロックを51%攻撃によって元に戻そうとすると、すべてのステークを失うことになる。