Ethash简介
Ethash是以太坊*工作量证明(PoW)算法*,它依赖于数据集的初始纪元的生成,该数据集的大小约为1GB,称为有向无环图(DAG)。DAG*使用 Dagger-Hashimoto算法*的版本,它是*Vitalik Buterin的Dagger算法*和*Thaddeus Dryja的Hashimoto算法*的组合。* Dagger-Hashimoto算法*是以太坊1.0使用的挖掘算法。随着时间的推移,DAG*线性增长,每*纪元(30,000块,125小时)更新一次。
种子,缓存,数据生成
PoW算法*涉及:
- 通过扫描*DAG*的先前块头来计算每个块的*Seed。+ - Cache 是一个16MB的伪随机缓存,根据种子计算,用于轻量级客户端中的存储。
- 来自cache的*DAG* Data Generation 在完整客户端和矿工上用于存储 (数据集中的每一项只依赖cache中的一小部分项目)+ - *矿工*通过随机抽取数据集的片段并将它们混合在一起进行挖掘。可以使用存储的缓存和低内存进行验证,以重新生成所需的数据集的特定部分。
参考:
Ethash-DAG: https://github.com/ethereum/wiki/wiki/Ethash-DAG
Ethash Specification: https://github.com/ethereum/wiki/wiki/Ethash
Mining Ethash DAG: https://github.com/ethereum/wiki/wiki/Mining#ethash-dag
Dagger-Hashimoto Algorithm: https://github.com/ethereum/wiki/blob/master/Dagger-Hashimoto.md
DAG Explanation and Images: https://ethereum.stackexchange.com/questions/1993/what-actually-is-a-dag
Ethash in Ethereum Yellowpaper: https://ethereum.github.io/yellowpaper/paper.pdf#appendix.J
Ethash C API Example Usage: https://github.com/ethereum/wiki/wiki/Ethash-C-API