マイニングアルゴリズム
最終編集者: @HiroyukiNaito(opens in a new tab), 2024年4月11日
イーサリアムのマイニングでは、Ethashと呼ばれるアルゴリズムを使っていました。 このアルゴリズムの基本的なアイデアは、マイナーがしらみつぶしに計算を行い、ノンス (nonce)の入力を探し、その結果のハッシュ値が、計算された難易度によって決められたしきい値より小さくなるように試みるというものです。 この難易度は動的に調整することが可能で、一定間隔でブロック生成を行うことができます。
前提知識
このページをより理解するために、事前にプルーフ・オブ・ワーク・コンセンサスとマイニングをお読みになることをお勧めします。
ダガーハシモト
ダガーハシモト(Dagger-Hashimoto)は、イーサリアムのマイニングアルゴリズムの前身となる研究アルゴリズムで、後にEthashに取って代わられました。 ダガーハシモトは、ダガー(Dagger)とハシモト(Hashimoto)という、2つの異なるアルゴリズムを組み合わせたものです。 研究実装のみを目的としており、イーサリアムメインネットが開始されるまでには、Ethashに引き継がれています。
ダガー(opens in a new tab)は、有向非巡回グラフ(Directed Acyclic Graph)(opens in a new tab)の生成を伴い、それのランダムなスライスを合わせてハッシュ化します。 コアとなる原則として、各ノンス (nonce)が必要とするのは巨大な全データツリーのごく一部のみであるということです。 各ノンス (nonce)のサブツリーを再計算することは、マイニングでは禁止されているため、ツリーを保存する必要があります(ただし、単一ノンス相当の検証では、サブツリーの再計算は可能)。 ダガーは、Scryptのような既存のアルゴリズムの代替となるように設計されています。Scryptはメモリハードですが、実際に安全なレベルのメモリハードまで増加すると検証が難しくなります。 一方、ダガーは共有メモリ・ハードウェア・アクセラレーションに対して脆弱であり、他の研究手段を優先し、取り下げられました。
ハシモト(opens in a new tab)は、入出力バウンドであること(メモリの読込みがマイニングプロセスの制限要因)により、ASIC耐性を付加するアルゴリズムです。 この理論は、RAMは計算資源よりも利用可能であるということです。数十億ドル相当かけて、異なるユースケースでのRAMの最適化について研究がすでになされています。これらのユースケースの多くには、ほぼランダムなアクセスパターン(そのためRAM「ランダム・アクセス・メモリ」と呼ばれる)が含まれています。 その結果、既存のRAMはアルゴリズムを評価する上で、ほぼ最適に近い可能性があります。 ハシモトは、データのソースとしてブロックチェーンを使い、上記の(1)と(3)を同時に満たします。
ダガーハシモトは、ダガーとハシモトアルゴリズムを修正したものです。 ダガーハシモトとハシモトの違いとしては、ブロックチェーンデータをソースとして使わず、ダガーハシモトは、カスタム生成のデータセットを使い、Nブロックごとにブロックデータを基にして更新します。 このデータセットは、ダガーアルゴリズムを使って生成され、ライトクライアント検証アルゴリズムのための、各ノンス (nonce)に特有なサブセットで効率的な計算を可能にします。 ダガーハシモトとダガーの違いとしては、オリジナルのダガーとは異なり、ブロックのクエリーとして使われるデータセットは、半永続的で、周期的な間隔で更新(例: 1週間に一回)されるだけということです。 データセットを生成する労力の割合はゼロに近く、共有メモリの高速化に関するSergio Lernerの主張は、無視できるようになります。
ダガーハシモトの詳細
Ethash
Ethashは、現在は廃止となっているプルーフ・オブ・ワークのアーキテクチャの下で、実際にイーサリアムメインネットで使われたマイニングアルゴリズムです。 Ethashは、ダガーハシモトのアルゴリズムが大幅に更新された後に、特定のダガーハシモトのバージョンに事実上付けられたた新しい名前です。なので、前バージョンの基本理念を継承しています。 イーサリアムメインネットで使われてきたのはEthashのみです。ダガーハシモトは、研究開発バージョンのマイニングアルゴリズムで、イーサリアムメインネットでマイニングが開始される前にEthashに引き継がれました。
参考文献
役に立つコミュニティリソースをご存知の場合は、 このページを編集して追加してください。