主页 > 苹果版imtoken图标 > 以太坊Ethereum DAG

以太坊Ethereum DAG

苹果版imtoken图标 2023-02-01 05:57:20

DAG 代表有向无环图。 在以太坊中,每个epoch都会使用Dagger-Hashimoto算法,结合Vitalik Buterin的Dagger算法和Thaddeus Dryja的Hashimoto算法来创建DAG。

DAG定义整理:

以太坊黄皮书中提到

在维基百科上

以太坊区块链链易查询_以太坊dag大小查询_sitehqz.com 以太坊和以太坊贸易的关系

图片.png

sitehqz.com 以太坊和以太坊贸易的关系_以太坊dag大小查询_以太坊区块链链易查询

在数学和计算机科学中,有向无环图 (DAG) 是没有有向环的有限有向图。 也就是说,它由有限数量的顶点和边组成,每个顶点和边都从一个顶点指向另一个顶点,因此无法从任何顶点 v 开始,遵循连贯的边序列,并最终循环回到 v。等价地,DAG 是具有拓扑排序的有向图,顶点序列使得每条边在序列中从前面指向后面。

在[github上的以太坊项目主页] explain():

...一个巨大的数据集,称为 DAG...

Ethash 算法期望 DAG 是 uint32(4 字节无符号整数)的二维数组,大小为 (nx 16),其中 n 是一个大数。 (n 从 16777186 开始)在幻数之后,DAG 的行应该按顺序写入文件,行与行之间没有分隔符,每个 unint32 编码为小端格式。

Ethash 算法期望 DAG 是 uint32(4 字节无符号整数)的二维数组,维度为 (n × 16),其中 n 是一个大数。 (n 从 16777186 开始并从那里增长。)在幻数之后,DAG 的行应该按顺序写入文件,行与行之间没有分隔符,每个 unint32 编码为小端格式。 (我不知道 n,什么是“幻数”)

sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块链链易查询_以太坊dag大小查询

以太坊创始人 Vitalik Buterin 自己也说过

Dagger 是基于适度连接的有向无环图(DAG,因此得名)的记忆困难工作证明,虽然远非最佳,但具有比当今所做的其他工作更强的记忆困难特性。

从本质上讲,Dagger 算法的工作原理是创建一个有向无环图(实际上是一棵树,其中的节点在数据结构中可以有多个父节点),包括根在内有十层,总共有 225-1 个值。

Dagger,一种基于适度连接的有向无环图(DAG以太坊dag大小查询,因此得名)的内存困难工作证明,虽然远非最佳,但具有比当今使用的任何其他东西更强的内存困难特性。

从本质上讲,Dagger 算法的工作原理是创建一个有向无环图(树的技术术语,其中每个节点都允许有多个父节点)具有十个级别,包括根和总共 225 - 1 个值。

以太坊区块链链易查询_sitehqz.com 以太坊和以太坊贸易的关系_以太坊dag大小查询

在github上的以太坊项目中介绍挖矿中的DAG定义

...计算 PoW(工作证明)需要固定数量资源的子集,其大小取决于随机数和块头。 这种资源(几千兆字节的数据)称为 DAG。 在每 30,000 个区块间隔(一个 100 小时的窗口,称为一个纪元)之间,DAG 完全不同并且需要一段时间才能生成。

...计算 PoW(工作证明)需要依赖于随机数和块头的固定资源的子集。 此资源(几千兆字节大小的数据)称为 DAG。 DAG 每 30000 个区块(一个 100 小时的窗口以太坊dag大小查询,称为一个纪元)就完全不同,并且需要一段时间才能生成。

在 github 项目上挖矿的 ethash-dag

用于工作量证明算法的 DAG(有向无环图)

sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块链链易查询_以太坊dag大小查询

在github项目#the-algorithm

一个大型的、短暂的、随机生成的数据库

这里简单总结一下:DAG是Ethash算法描述中的“数据集”

1 存在一个种子,可以通过扫描该点之前的块头来为每个块计算出该种子。

2 从种子中,可以计算出 16 MB 的伪随机缓存。 轻客户端存储缓存。

sitehqz.com 以太坊和以太坊贸易的关系_以太坊dag大小查询_以太坊区块链链易查询

3 从缓存中,我们可以生成一个 1 GB 的数据集,其属性是数据集中的每个项目仅依赖于缓存中的少量项目。 完整的客户端和矿工存储数据集。 数据集随时间线性增长。

4 挖掘涉及随机抓取数据集并将它们混合在一起。 通过使用缓存重新生成所需数据集的特定片段,可以在低内存下完成验证,因此您只需要存储缓存即可。

1. 存在一个种子,可以通过扫描块头直到那个点来为每个块计算种子。

2. 从种子中,可以计算出一个 16 MB 的伪随机缓存。 轻客户端存储缓存。

3.从缓存中,我们可以生成一个 1 GB 的数据集,其特性是数据集中的每个项目仅依赖于缓存中的少量项目。 完整的客户端和矿工存储数据集。 数据集随时间线性增长。

4. 挖掘包括抓取数据集的随机切片并将它们散列在一起。 通过使用缓存重新生成您需要的数据集的特定部分,可以在低内存的情况下完成验证,因此您只需要存储缓存即可。