以太币挖矿算法 Ethash:特点、流程与内存要求
500)this.width=500' =10 =10 alt='如何挖掘以太坊?它的未来是什么?'>
接下来我们看一下基本流程:
对于每一个区块,都会先计算一个种子,种子的计算只依赖于当前区块的信息,比如区块和区块的地址。
使用种子生成一个32MB的伪随机数据集,这个种子称为缓存。轻客户端需要保存这个缓存。
基于缓存会生成一个1GB大小的数据集,我们称之为DAG,这个数据集中每个元素只依赖于缓存中的少数元素,也就是说只要有缓存,就可以快速计算出DAG中指定位置的元素,一个完整的挖矿客户端需要保存DAG。
挖矿可以概括为从 DAG 中随机选取元素,然后进行哈希运算的过程。验证过程也一样,只不过不是从 DAG 中选取元素,而是根据缓存计算指定位置的元素,然后验证这组元素的哈希结果是否小于某个值。由于缓存较小,且指定位置的 DAG 元素容易计算,所以验证过程只需要普通 CPU 和普通内存即可完成。
缓存和 DAG 会每个周期更新一次,一个周期的长度为 1000 个区块。也就是说,这 1000 个区块生成的缓存和 DAG 是一模一样的,所以挖矿的主要工作就是从 DAG 中读取数据,而不是更新缓存和 DAG。DAG 的大小会随着时间的推移呈线性增长,从 1GB 开始,每年增加约 7GB —— 因此 2015 年 12 月约为 8GB,2016 年 12 月约为 15GB。
注:以上步骤中的数字随着开发进度有所调整,准确数值请以源代码为准。
挖矿软件
我们预计在发布时将至少有两种挖矿方法:
使用Mist客户端(官方客户端实现,基于Go语言)进行CPU挖矿。
GPU挖矿是通过以太坊守护进程(eth)和 相结合的方式进行的,守护进程与 之间可以通过JSON-RPC API完成数据通信,目前与挖矿相关的API有两个: 和 。