ProgPoWってなんだ?

今回は、Ethereumの開発者コミュニティで新アルゴリズム「ProgPoW」に関しての議論があるみたいなんですが、 ProgPowってなんだ?Pow(proof of work)とは、違うの?ってことで調べてみました。

そもそもなんですかこれ?

ぱっと調べてみた

Programmatic Proof of Workの略で、要はProof of workの進化版みたい。
PoWって、コンセンサスアルゴリズムっていって、いろいろなトランザクションをブロック化する時に、その合意形成に使ってましたね。
それを変更して、よりASIC耐性を高めたものにするみたいです。

ASIC(Application Specific Integrated Circuit)問題

EthereumのPoWは、Ethashっというアルゴリズムを使っており、ハッシュ値を求めることで合意の形成を行います。
この時、その合意形成の権利を得るために膨大な計算をします。これが俗に言うマイニングという作業になります。
管理者がいないパブリックブロックチェーンでは、非中央集権を実現するために、合意形成の権利が一部に集中するのではなく、様々なマイナーに分散してほしいものです。
しかし、中国のBITMAIN社の販売する、ASIC(特定用途向け集積回路)を使うと、一般的なPCが行うGPUマイニングに対して数千倍という時間効率を発揮する場合もあるそうです。
そうなってしまうと、一部のマイナーに独占されてしまい、51%攻撃などできてしまう状態になりセキュリティ的に合意が成り立たなくなる。といったことがあげられます。
これがASIC問題です。

ビットコインはどうなんでしょうか?

ビットコインも同じく、Powを使って合意形成しています。 なのでビットコインの場合もこのASIC問題に悩まされていました。 しかし、同じPowでもビットコインをEthereumのアルゴリズムは異なります。 ビットコインはSHA256でした。Ethereumは、Ethashでした。 Ethashの特徴は、DAG構造を取るため、 従来のアルゴリズムに比べてメモリ使用量が格段に大きい。 一方でCPUの計算処理にかかる負荷が小さいという特長を持つ。 一般に計算が複雑であるほど優位性が大きくなるASICには不向きな仕組みとなっている。 ですので、そもそもEthereumのほうがASIC耐性があるといったことがわかりました。

なんでかえるの?

では、なんで変えるのって話ですが、Ethereumの合意形成は、今後PowからPOSに以降していくことが決まってます。 その以降期間に現在の均衡がくずれる可能性があります。 そのため、予防策として、今回のprogPowへの変更が議論されているといった流れになります。

ProgPoW

ブロック生成における内部ループで「ランダム生成されたプログラム」を実行する必要があることから、ProgPoWと命名され。 このプロセスは最新のGPU性能に最適化されており、ランダム性によって専用ASICに見られるパイプライン最適化手法の妨げになるという。

The main elements of the algorithm are:

  • Changes keccak_f1600 (with 64-bit words) to keccak_f800 (with 32-bit words) to reduce impact on total power
  • Increases mix state.
  • Adds a random sequence of math in the main loop.
  • Adds reads from a small, low-latency cache that supports random addresses.
  • Increases the DRAM read from 128 bytes to 256 bytes.

もっと詳しく

https://github.com/ifdefelse/ProgPOW