以太坊挖礦算法 Ethash 又名 Dashimoto (Dagger-Hashimoto),是 Hashimoto 算法結合 Dagger 算法產生的變種算法。Ethash 算法大致流程如下:
1. 生成種子
根據區塊塊頭信息計算出一個種子。
2. 偽隨機數據集
根據種子生成一個大小為 16M 的偽隨機數據集,其大小每 30000 個區塊進行一次更新。輕節點進行存儲。其中值得說明的是種子計算生成第一個數,其后的每個數都是前一個數的哈希值。
3. DAG數據集
根據偽隨機數據集生成大小 1G 的大規模數據集。該數據集中每項元素通過偽隨機數據集中少量的幾項計算得到。如果給出偽隨機數據集合指定的幾項,很快可以算出 DAG 中指定的元素,輕節點用此進行驗證。
4. 挖礦
通過 header 及 nonce 計算出一個初始的哈希值映射到初始位置A,然后讀取A位置元素和A的相鄰后一個位置A'的元素,再通過(A和A')計算出位置(B和B'),依次類推,迭代64次后,一共讀取出128個數,最后計算這128個數的哈希值與目標值target比較,若滿足 target,則挖礦成功;否則重新嘗試 nonce。
挖礦難度
最后一項則為以太坊引入的“難度炸彈”,挖礦難度隨着每 10000 個區塊的生成而翻倍。驗證影響以太坊出塊速度。