以太坊的挖矿算法

对于基于工作量证明的区块链系统来说,挖矿是保障安全的重要手段。为了抵制矿机,以太坊设计了一中memory hard mining puzzle,以太坊用了两个数据集,一个是16M的cache,一个是1G的dataset叫做DAG,DAG是从cache中生成,这样设计的目的是便于轻节点验证,轻节点只需要保存16M的cache即可,只有矿工才需要保存1G的大数据集。基本思想是先用一个种子节点经过一些运算得到数组的第一个元素,然后对元素依次取hash得到后面的元素,这样得到的是一个填充了伪随机数的数组,就是一个cache,然后大数据集里面的每一个元素根据cache里的元素,依次读取256次取hash生成,求解puzzle的时候用的是大数据集,按照伪随机的顺序从大数据集中读取128个数,一开始,根据区块的块头算出一个初始的hash,根据hash映射到大数据集中的某个位置,把该数读取出来,然后进行运算得到下一个数得位置,每次读取的时候除了计算出这个元素的位置之外,还要把相邻的元素读取出来,进行64次循环,每次取出2个数,得到128个数,最后算出一个hash值,和挖矿难度的目标阈值比较一下,如果不合适就将block header里面的nonce替换一下重复上面过程。下面是以太坊的挖矿算法(ethash)伪代码以太坊的挖矿算法_第1张图片
第一步先生成16M的cache,cache中每个元素都是64字节的hash值,第一个元素是种子的hash,后面的每一个元素是前面一个元素的hash
以太坊的挖矿算法_第2张图片
第二步从cache生成大数据集
以太坊的挖矿算法_第3张图片
以太坊的挖矿算法_第4张图片
以太坊的挖矿算法_第5张图片

你可能感兴趣的:(区块链)