イーサリアムのコンセンサスアルゴリズムは、独自のアルゴリズム「Ethash」を用いています。
この「Ethash」は、大きな分類では、プルーフオブワーク(PoW)というカテゴリのマイニング方法でビットコインと同じアルゴリズムです。しかし、この「Ethash」は、ハッシュ化の方法を工夫することで、ビットコインが備えていないASIC耐性を備えています。
この記事では、Ethashの特徴を解説し、その詳細なアルゴリズムを説明します。またそのアルゴリズムによって、なぜASIC耐性を持つのか解説します。
この記事はethereum/wiki Ethashを参考に記載しています。
なおイーサリアムの根本の仕組みについて知りたい方は下記のリンクで解説しています。
Ethashとは何か?
Ethashとは、イーサリアムにおけるプルーフオブワークのアルゴリズムです。
このEthashの特徴は、マイナーがハッシュ値を生成する際に、いくつかの計算プロセスが必要な点です。ハッシュ値生成に一手間加えることによって、イーサリアムはメモリ耐性(ASIC耐性)を備えていることに成功しています。
一方で、ビットコインのアルゴリズムは、SHA256の関数で計算するシンプルなアルゴリズムです。
下記で、ビットコインにおけるプルーフオブワークの仕組みを解説しています。
【図解】誰でもわかるプルーフ・オブ・ワーク(proof of work)の仕組みメモリ耐性(ASIC耐性)はなぜ必要か?
ASIC耐性が必要な理由は、マイニングの中央集権化を防ぐためです。
ASIC耐性を持つASICブーストは、ビットコイン専用にカスタマイズされたメモリで、Bitmain社が開発・販売を行っています。このBitmain社は、実は巨大マイニングプールの1つなんですね。
BITMAIN社のASIC Boost
つまり、新しい専用マイニングマシンを開発できる資本力がなければ、ビットコインのマイニングで収益を得ることが難しい状況です。実際に、ビットコインのマイニングプールは、分散化されてるとはとても言えません。
中央集権化は、51%アタック等のセキュリティ面で問題があるのはもちろんのこと、マイナーと開発者の意見が割れた場合に、マイニングプールの巨大な圧力に屈しなければならない状況が起き得るということです。
実際に、ビットコインはビットコインキャッシュと分裂しましたが、マイナーと開発者の争いでした。
Ethashのアルゴリズムの仕組み
Ethashのアルゴリズムは下記のステップに従って行われます。
- 1つ前のブロックヘッダーの情報と、マイナーが推測したノンスを、SHA3でハッシュ化する。この値をMix0とする。※SHA256と解説されている記事が多いですが、イーサリアムでは異なります。
- Mix0によって、DAG Pageから128バイトのページを取得する
- Mix0は、取得したDAG Pageと組み合わされMix1とする。この組み合わせはイーサリアム固有のミキシング機能を用いる。
- 2および3を64回繰り返して、最終的なアウトプットのMix64を出力する
- Mix64は、処理されて32バイトのMixダイジェストが生成される
- Mixダイジェストは、あらかじめ定義されたターゲットの閾値と比較される。このMixダイジェストが、ターゲット閾値以下であればマイニングが成功したとみなされ、イーサリアムネットワークにブロードキャストされ、マイナーは報酬を獲得する。
図1:Ethashのハッシュ値探索のステップ
なぜASIC耐性を持つのか?
このアルゴリズムは、ハッシュ値の探索にDAG Pageの読み込みが必要になっています。DAG Pageは、1ページにつき128バイトの読み取りが必要です。
1回のノンスをハッシュするには、64回の読み取りが必要になるため、結果として128バイト×64=8kbの読み込みが必要です。この処理を高速化するには、DAG Pageを複数フェッチしておく(先回りして読み込んでおく)方法が考えられますが、
64回に渡るDAG Pageの選択は擬似ランダムに行われるため、フェッチすることができても、128バイトデータを読み込むよりはるかに遅くなります。
つまり、ノンス作成で最も効率的な方法は128バイトのデータを読み込むスピードを高速化することになります。イーサリアムのノンス作成はメモリ帯域幅が制限することになります。
Ethashは、フェッチすることでの高速化を防ぎ、マシンのメモリ性能以上にマイニングを効率化できないアルゴリズムになっています。よってビットコインなどと異なりASIC耐性を備えているのです。
イーサリアムのハッシュレートの理論値
イーサリアムのハッシュレートの理論値は、現行のメモリの最大帯域幅に依存しています。まさに、最大帯域幅に依存していることによってメモリ耐性があることを証明しているわけです。
実際に、現在のイーサリアムのハッシュレートは計算で出すことが可能です。
2017年3月において、一般的に使用されているマイニングマシンは下記の通りです。
MSI RX 470 グラフィックカード
RX 470仕様:
コスト:~175ドル(2017年3月)
メモリ:8ギガバイト
メモリ帯域幅:211ギガバイト/秒
上記のGPUでマイニングを行なった場合、計算式に当てはめると下記の計算ができます。
または37.9ナノ秒/ハッシュ。
実際の動作中のRX 470のハッシュレートは~24 メガハッシュ / 秒 です。
これは、上記で計算された最良の理論上のハッシュ時間よりも、わずか3.8ナノ秒遅いだけです。この小さな誤差は、メモリレイテンシやシステム内の他の高速動作によって起きています。
したがって、DAG Pageをフェッチする速度が、ハッシュレートに制限をかけていることを示しています。
まとめ
イーサリアムのコンセンサスアルゴリズム「Ethash」のアルゴリズムについて解説しました。
多くの記事がASIC耐性を持つと記載されていますが、その仕組みについてや、なぜ耐性を持つのかまで解説したものがなかったため、難解な説明を読みながら解説しました。少しでも参考になればありがたいです。
なおイーサリアムの仕組みを知りたい方は下記のリンクで詳しく解説しています。