以太幣的挖礦機制全解析

買賣虛擬貨幣

隨著以太坊正式執行的臨近,詢問以太如何挖礦的朋友也越來越多。這篇文章綜合了我們目前所知道的資訊,希望能對大家有一些幫助。由於挖礦演算法的設計和改進仍在進行中,以下資訊僅供參考。

設計目標

抵抗礦機(ASIC Resistance)。使用專門最佳化的晶片產生的挖礦優勢應該儘可能的小,小到即使使用普通CPU挖礦也能產生收益。

輕客戶端可驗證。輕客戶端應該有能力驗證每一個塊的真實性。目標是在普通桌面電腦上執行用C實現的驗證演算法,驗證時間小於0.01秒,用Python或者Javascript小於0.1秒,使用記憶體不超過1MB。

挖礦演算法

以太幣(ether)的挖礦演算法叫做Ethash, 又名Dashimoto (Dagger-Hashimoto),是Hashimoto演算法結合Dagger之後產成的一個變種。它的特點是挖礦的效率基本與CPU無關,卻和記憶體大小和記憶體頻寬正相關。對記憶體大小和頻寬的要求意味著那些透過共享記憶體的方式大規模部署的礦機晶片並不能在挖礦效率上有線性或者超線性(super-linear)的增長。

接下來讓我們看看Dashimoto的基本流程:

對於每一個塊(block),先計算出一個種子(seed)。種子的計算只依賴於當前塊的資訊,例如block number以及block headers。

使用種子產生32MB的偽隨機資料集,稱為cache。輕客戶端需要儲存cache。

基於cache再生成一個1GB大小的資料集,稱為the DAG。這個資料集中的每一個元素都只依賴cache中的某幾個元素,換句話說,只要有cache就可以快速計算出DAG中指定位置的元素。完整的可挖礦的客戶端需要儲存DAG。

挖礦可以概括為從DAG中隨機選擇元素然後對其進行hash的過程。驗證的過程也是一樣,只不過不是從DAG裡面選擇元素,而是基於cache計算得到指定位置的元素,然後驗證這個元素集合的hash結果小於某個值。由於cache很小, 而且指定位置的DAG元素很容易計算,因此驗證過程只需要普通CPU和普通記憶體即可完成。

cache和DAG每一個週期更新一次,一個週期的長度是1000個塊。也就是說這1000個塊產生的cache和DAG是完全一樣的,因此挖礦的主要工作在於從DAG中讀取資料,而不是更新cache和DAG。DAG的大小隨時間的推移線性增長,從1GB開始,每年增加大約7GB – 因此到2015年12月大約是8GB, 到2016年12月大約15GB。

注:以上步驟中的數字已經隨著開發的推進有了調整,準確值請參考原始碼。

挖礦軟體

我們預計在上線之時將有至少兩種挖礦方式:

使用Mist客戶端(官方客戶端實現,基於Go語言)進行CPU挖礦。

透過以太坊守護程序(eth daemon)和sgminer的組合進行GPU挖礦。守護程序和sgminer之前的資料通訊可以透過JSON-RPC API完成。目前有兩個API和挖礦有關:eth_getWork以及eth_submitWork。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;