【原文】https://blog.youkuaiyun.com/angciyu/article/details/80433255
大家平时在玩 以太坊geth的时候,经常会看到Ethash DAG,比如“Disk storage enabled for ethash DAGs”,就是说允许Ethash DAG存储在磁盘中,那么它到底是什么东东?
Ethash是PoW系统,它需要一个大约1GB的数据集,它就是DAG。这通常需要几个小时才能生成,所以我们倾向于在硬盘中存储它。希望将DAG存储在硬盘中的客户端应符合下面的规范,以便与其他客户端共享缓存:
存储位置
DAG应该存储在一个1GB的转储文件中,存储在一个文件中:
- Mac / Linux中
$(HOME)/.ethash/full-R<REVISION>-<SEEDHASH>
- windows:
$(HOME)/Appdata/Local/Ethash/full-R<REVISION>-<SEEDHASH>
其中:
<REVISION>
是一个十进制整数;<SEEDHASH>
是16个小写十六进制数字,指定了纪元的种子散列的前8个字节。
这个目录中可能有多个这样的DAG文件,取决于用户是否及时删除了那些过时的。
内容格式
每个文件应该以8字节的幻数开始,0xfee1deadbaddcafe
以little-endian格式(即字节fe ca dd ba ad de e1 fe
)写入。
Ethash算法期望DAG作为uint32s(4字节无符号整数)的二维数组,具有维数(n×16),其中n是大数。(n从16777186开始并从那里增长)。在幻数之后,DAG的行应该顺序写入文件中,在行之间没有分隔符,并且每个unint32以little-endian格式编码。