什麼是挖礦和Ethash演算法?

2021-07-24 08:12:19 字數 2499 閱讀 3205

挖礦這個詞源於對加密貨幣與**的模擬。**或***很稀有,電子代幣也是,增加總量的唯一方法就是挖礦。以太坊也是這樣,發行的唯一辦法就是挖礦。但是不像其他例子,挖礦也是通過在區塊鏈中建立、驗證、發行和傳播區塊來保護網路的方法。

以太坊,和所有區塊鏈技術一樣,使用激勵驅動的安全模式。共識基於選擇具有最高總難度的區塊。礦工創造區塊,其他人檢測有效性。區塊只有在包含特定難度的工作量時才有效,還有其他合格性條件。請注意到以太坊serenity里程碑,可能就會被取代(參考權益證明模型)。

以太坊區塊鏈在很多方面與位元幣區塊鏈類似,但也有些不同。在區塊鏈架構方面,以太坊和位元幣之間最主要的的區別是,不像位元幣,以太坊區塊不僅包含交易列表也包含最近狀態(merkle patricia特里結構的根散表編碼在狀態中更精確)除此之外,另外兩個值,區塊數和難度,也儲存在區塊中。

使用的工作量證明演算法叫ethash(dagger-hashimoto演算法的改良版本),包括找到演算法的隨機數輸入以使結果低於特定的難度閾值。工作量證明演算法的意義在於,要找到這樣乙個隨機數,沒有比列舉可能性更好的策略,而解決方法的驗證瑣碎又廉價。由於輸出有均勻分布(是散表功能應用的結果),我們可以保證,平均而言,需要找到這樣乙個隨機數的時間取決於難度閾值。這使得只通過操縱難度來控制找到新區塊的時間成為可能。

正如協議中所描述的,難度動態調整的方式是每15秒整個網路會產生乙個區塊。我們說網路用15秒區塊時間生產乙個區塊鏈。這個「心跳」基本上主要強調系統狀態同步,保證不可能維持乙個分叉(允許double spend)或被惡意分子重寫歷史,除非攻擊者有半數以上的網路挖礦能力(即所謂的51%攻擊)。

任何參與到網路的節點都可能是礦工,預期的挖礦收益和他們的(相對)挖礦能力或者說成正比,比如被網路總散表率標準化的,每秒嘗試的隨機數數量。

ethash工作量證明是記憶體難解的,這使它能抵抗asic。記憶體難解性由工作量證明演算法實現,需要選擇依靠隨機數和區塊標題的固定資源的子集合。這個資源(幾十億位元組大小的資料)叫做dag。每3000個區塊的dag完全不同,125小時的視窗叫做epoch(大約5.2天),需要一點時間來生成。由於dag只由區塊高度決定,它可以被事先生成,如果沒有被事先生成,客戶端需要等到程序最後來生產區塊。如果客戶端沒有預生成並提前快取dag,網路可能會在每個epoch過渡經歷大規模區塊延遲。注意不必要生成dag以驗證工作量證明,它可以在低cpu和小記憶體的狀態下被驗證。

在特殊情況下,從零開始建立節點的時候,只有在為現存epoch建立dag的時候才會開始挖礦。

獲獎區塊的成功工作量證明礦工會獲得:

在區塊中執行所有交易所消費的、由獲勝礦工提交的gas都由每個交易的傳送者支付。已發生的gas成本歸到礦工賬戶作為共識協議的一部分。隨著時間變化,這會使資料區塊獎變得矮小。

叔伯塊是穩定的區塊,比如說,和包含先前區塊(最多回6個區塊)的父區塊。有效的叔伯塊會受到獎勵以中和網路滯後給挖礦獎勵帶來的影響,因而提公升安全性(這叫做ghost協議)。叔伯塊由成功工作量證明礦工形成的區塊中所包含的叔伯塊接收7/8的資料區塊獎勵(=4.375以太幣)。每個區塊最多允許2個叔伯塊。

挖礦的成功取決於設定的區塊難度。區塊難度動態調整每個區塊,以規定網路雜湊能力來創造12秒區塊時間。找到區塊的機會因此由與難度相關的雜湊率產生。

ethash將dag(有向非迴圈圖)用於工作量證明演算法,這是為每個epoch生成,例如,每3000個區塊(125個小時,大約5.2天)。dag要花很長時間生成。如果客戶端只是按需要生成它,那麼在找到新epoch第乙個區塊之前,每個epoch過渡都要等待很長時間。然而,dag只取決於區塊數量,所以可以預先計算來避免在每個epoch過渡過長的等待時間。geth和ethminer執行自動的dag生成,每次維持2個dag以便epoch過渡流暢。挖礦從控制台操控的時候,自動dag生成會被開啟和關閉。如果geth用—mine選項啟動的時候,也會預設開啟。注意客戶端分享dag資源,如果你執行任何客戶端的多個例項,確保自動的dag生成只在乙個例項中開啟。

為任意epoch生成dag:

geth makedag
我們的演算法,ethash(之前被稱為dagger-hashimoto),是基於乙個大的、瞬時的、任意生成的、形成dag(dagger-part)的資料組規定,嘗試解決它乙個特定的約束,部分通過區塊標題雜湊來決定。

它被設計用於在乙個只有慢cpu的環境中來雜湊快速驗證時間,但在被提供大量高頻寬記憶體時,為挖礦提供大量的加速。大量記憶體需求意味著大規模礦工獲得相對少的超線性利益。高頻寬需求意味著從堆在很多超速處理單元、分享同樣記憶體的加速在每個單獨的單元給出很少的利益(譯者注:通過阻止專用晶元共享記憶體的方式,降低礦機的作用)。

沒有節點驗證的利益因而阻礙中心化,這在挖礦中很重要。

外部挖礦應用和以太坊工作規定和報送的後台程式之間的交流通過json-rpc api發生。提供兩個rpc功能;eth_getwork和eth_submitwork。

這些被正式記錄在json-rpc api維基百科文章的礦工條目下。

為了挖礦你需要乙個完全同步的、能夠挖礦的以太坊客戶端和至少乙個以太坊賬戶。這個賬戶用於傳送挖礦獎勵,通常被稱為貨幣基或以太基。檢視這個說明的「建立帳戶」章節,學習如何建立帳戶。

警告:開始挖礦前,確保區塊鏈和主鏈完全同步,否則就不能在主鏈上挖礦。

什麼是挖礦?

很多人想進入挖礦這個行業,但是不知道挖礦到底是怎麼進行的。區塊鏈是一種分布式資料庫,是一串使用密碼學方法相關聯產生的資料塊,每個資料塊都包含了一次網路交易資訊,用於驗證其資訊的有效性和生成下乙個區塊。每乙個區塊所運用演算法並不是簡單的計算題,而是使用雜湊雜湊 hash 演算法。而礦機根據自身的算力對...

區塊鏈整理 三 以太坊挖礦演算法 ETHASH

以太坊挖礦演算法 ethash 又名 dashimoto dagger hashimoto 是 hashimoto 演算法結合 dagger 演算法產生的變種演算法。ethash 演算法大致流程如下 1.生成種子 根據區塊塊頭資訊計算出乙個種子。2.偽隨機資料集 根據種子生成乙個大小為 16m 的偽...

什麼是雲挖礦? 雲挖礦與礦機挖礦的區別 這裡告訴你

前面我也說過普通的挖礦就是購買購買礦機自己挖礦,對於這種挖礦的方式有很多的要求,礦機的費用 水電 維修 溫度等等。當然很多人都嫌購買挖礦機或者自己管理硬體裝置的麻煩,可是又想投資位元幣的開採,那麼這或許可以利用現在所謂的雲計算或者說是雲伺服器來實現雲挖礦,簡單地說,雲挖掘就是使用來自遠端資料中心的共...