什麼是 DAG?
我試過用Google搜尋它並在這裡找到它。
這裡很多人都在談論它,但實際上 DAG 是什麼?
DAG 代表有向無環圖。在乙太坊中,每個 epoch 都會使用 Dagger-Hashimoto 算法的一個版本創建一個 DAG,該算法結合了Vitalik Buterin 的 Dagger 算法和Thaddeus Dryja 的 Hashimoto 算法。
在文件和文獻中有很多地方定義了 DAG。這些整理如下:
來自黃皮書:
… d是目前的 DAG,需要一個大型數據集來計算混合雜湊…
來自維基百科:
有向無環圖: 圖片來源 David Eppstein
在數學和電腦科學中,有向無環圖 (DAG) 是沒有有向環的有限有向圖。也就是說,它由有限多個頂點和邊組成,每條邊從一個頂點指向另一個頂點,因此無法從任何頂點 v 開始並遵循最終循環回 v 的一致定向的邊序列. 等價地,DAG 是一個有向圖,它具有拓撲排序,即一個頂點序列,使得每條邊在序列中從較早指向到較晚。
來自https://github.com/ethereum/wiki/wiki/Ethash-DAG:
…一個巨大的數據集,稱為 DAG…
Ethash 算法期望 DAG 為 uint32s(4 字節無符號整數)的二維數組,維度為 (n × 16),其中 n 是一個大數。(n 從 16777186 開始並從那裡增長。)在幻數之後,DAG 的行應按順序寫入文件,行之間沒有分隔符,每個 unint32 以 little-endian 格式編碼。
來自 Vitalik Buterin 的(我認為)Dagger Paper,2013 年 12 月:
Dagger,一種基於適度連接的有向無環圖(DAG,因此得名)的記憶硬性工作證明,雖然遠非最佳,但它的記憶硬性比當今使用的任何其他東西都要強得多。
本質上,Dagger 算法通過創建一個有向無環圖(允許每個節點有多個父節點的樹的技術術語)來工作,該圖具有十個級別,包括根和總共 2^25 - 1 個值。
來自https://github.com/ethereum/wiki/wiki/Mining#so-what-is-mining-anyway:
…計算 PoW(工作量證明)需要依賴於 nonce 和塊頭的固定資源的子集。這種資源(幾千兆字節大小的數據)稱為 DAG。DAG 每 30000 個區塊(一個 100 小時的視窗,稱為一個 epoch)完全不同,並且需要一段時間才能生成。
來自https://github.com/ethereum/wiki/wiki/Mining#ethash-dag
工作量證明算法的 DAG(有向無環圖)
來自https://github.com/ethereum/wiki/wiki/Mining#the-algorithm
一個大的、瞬態的、隨機生成的數據集
來自https://github.com/ethereum/wiki/wiki/Ethash
DAG 是 Ethash 算法描述中的“數據集”,強調我的:
- 存在一個種子,可以通過掃描塊頭直到該點來為每個塊計算種子。
- 從種子中,可以計算出 16 MB 的偽隨機記憶體。輕客戶端儲存記憶體。
- 從記憶體中,我們可以生成一個 1 GB 的數據集,其屬性是數據集中的每個項目僅依賴於記憶體中的少量項目。完整的客戶端和礦工儲存數據集。數據集隨時間線性增長。
- 探勘涉及抓取數據集的隨機切片並將它們散列在一起。通過使用記憶體重新生成您需要的特定數據集片段,可以在記憶體不足的情況下進行驗證,因此您只需要儲存記憶體即可。
乙太坊使用 Ethash(工作證明系統)。
Ethash PoW 難以記憶,因此基本上可以抵抗 ASIC。這基本上意味著計算 PoW 需要根據隨機數和塊頭選擇固定資源的子集。該資源(幾 GB 大小的數據)稱為DAG。從這裡採購。