# PoWとPoSについて

By [Adachi Tomoki](https://paragraph.com/@adachi-tomoki) · 2022-03-20

---

はじめに
----

[https://beincrypto.com/ethereum-merge-successfully-kiln-testnet/](https://beincrypto.com/ethereum-merge-successfully-kiln-testnet/)

ついにEthereumのMergeがテストネットで成功しました🎉

それに伴ってコンセンサスアルゴリズムがPoWから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％攻撃によって元に戻そうとすると、すべてのステークを失うことになる。

---

*Originally published on [Adachi Tomoki](https://paragraph.com/@adachi-tomoki/pow-pos)*
