http://www.7klian.com

浅析Ethash共鸣算法

a)区块头和 nonce 的 hash 作为 seed;

上一期我们分享了在 Ethereum 平台长举办 Merkle Proof 问题阐明的实践。本期我们主要接头喜好者们都很是体贴的话题——共鸣算法。以 Ethereum 的 Ethash 为例,我们将从 Ethash 算法、DAG(有向无环图,Directed Acyclic Graph) 的生成几个方面逐一先容。
c)将 seed 的 hash 为 cache 中第一个 hash,cache 中后续每个 hash 均为前一个 hash 的 hash;

凭据上面的要领计较 DAG 所有索引位置的 hash。

以计较 DAG 索引 x 处的 hash(记为 hashx)为例:
Epoch 和 DAG

a)按照当前 block 的 height 映射到对应的 epoch;

e)将第4步反复3轮。

4. DAG 生成代码

e)将 hashx 举办 hash 获得新的 hashx 即为 DAG 索引 x 处的 hash。

b)生成 epoch 的 seed;

1. 算法流程

Ethash 算法需要区块头和 DAG,通过不断实验差异的 nonce,来计较满意难度值要求的hash。
将区块头的 hash 和方针 hash(2^256/difficulty)较量,,假如小于方针 hash 则 nonce 值 ok,不然更新 nonce 值从头开始。
要生成 DAG 需要先生成一个 Cache,再基于 Cache 生成 DAG。
2. DAG Cache 生成代码

b)取 seed hash 的 W0计较 W0^x(W0的 x 次方)作为 hashx 的 W0,将 seed hash 的其他 W 拷贝到 hashx 对应的 W;
2. 算法代码

d)将 cache 中的一个 hash 更新为其前一个 hash 和 cache 中伪随机索引的一个 hash 的 hash;
b)凭据公式计较一个 DAG 索引,按照索引从 DAG 中获取数据,将得到的数据和 seed 举办 fnv_hash 作为新的 seed;
在 Ethereum 平台上,每30,000个区块为一个 epoch,对应一个 DAG,DAG 是一个约莫1G 巨细的数据块,需要几个小时的时间才气生成出来。
Ethash是 Ethereum 1.0基于 POW(事情量证明)的共鸣引擎,也叫以太的挖矿算法。其前身是 Dagger 算法和 Hashimoto 算法。
a)从 Cache 中取 x/rows(rows 为 Cache 中 hash 的总个数)的 hash 作为 seed,共16个 W(W 为一个 uint 32的整数);
d)按照公式在 Cache 中伪随机索引一个 hash 和 hashx 计较 fnv_hash 作为新的hashx,这步反复256轮;
d)压缩计较的 seed 作为 digest;
e)将1步计较的 seed 和第四步计较的 digest 的 hash 作为该区块头的 hash;
Ethash 算法

c)计较 hashx 的 hash 作为新的 hashx;
Ethash 简介
其思想是通过 IO 的限制来抵抗专用矿机,实现挖矿设备平等,到达去中心化的目标。切合区块链的去中心化精力。

DAG 的生成
1. DAG Cache 的生成

3. DAG 生成

c)将第2步反复64轮;

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。