A. eth挖礦是什麼原理
凡是涉及到幣,就一定離不開挖礦。以太坊網路中,想要獲得以太坊,也要通過挖礦來實現。說到挖礦,就一定離不開共識機制。
不知道大家還記得比特幣的共識機制是什麼嗎?比特幣的共識機制是 PoW (這是英文 Proof of Work 的縮寫,意思是「工作量證明機制」)。簡單來說,就是多勞多得,你付出的計算工作越高,那麼你就越有可能第一個找到正確的哈希值,就越有可能得到比特幣獎勵。
但是,比特幣的PoW存在著一定的缺陷,就是它處理交易的速度太慢,礦工們需要不斷地通過計算來碰撞哈希值,這是勞民傷財且效率低下的。對區塊鏈知識有涉獵的朋友們應該看到這樣一種說法:
以太坊為了彌補比特幣的不足,提出了新的共識機制,名叫 PoS(這是英文的縮寫,意思是「權益證明」,也有翻譯成「股權證明」的)。
PoS 簡單來講,其實就跟它的字面意思一樣:權益嘛,股權嘛,你持有的幣越多相當於你的股權越多,你的權益越高。
以太坊的PoS就是說:你持幣越多,你持有幣的時間越久,你的計算難度就會降低,挖礦會容易一些。
在以太坊最初的設定中,以太坊希望能夠通過階段性的升級,在前期依舊採用PoW來構建一個相對穩定的系統,之後逐漸採用 PoW+PoS,最後完全過渡到 PoS。所以,說以太坊的共識機制是PoS,沒錯,但是PoS只是以太坊發布之初的一個計劃或者說目標,目前以太坊還沒有過渡到 PoS,以太坊採用的共識機制仍是 PoW,就是比特幣那個 PoW,但是又和比特幣的PoW稍稍不同。
這里的信息量有點大,
第一個信息點是:以太坊目前採用的共識機制也是PoW,但是和比特幣的PoW稍稍不同。那麼,和比特幣的PoW到底有什麼不同呢:簡單來說,就是以太坊挖礦難度可以調節,比特幣挖礦難度不能調節。就好比咱們高考,因為各個省份的教學情況、生源人數都不一樣,所以高考分為全國卷和各省自主命題。
以太坊說我贊成這樣分地區出題,比特幣說:不行,必須全國同一卷,大家難度都一樣!
通俗解釋,就是,比特幣是利用計算機算力做大量的哈希碰撞,列舉出各種可能性,來找到一個正確哈希值。而以太坊系統呢,它有一個特殊的公式用來計算之後的每個塊的難度。如果某個區塊比前一個區塊驗證的更快,以太坊協議就會增加區塊的難度。通過調整區塊難度,就可以調整驗證區塊所需的時間。
以太坊協議規定,難度的動態調整方式是使全網創建新區塊的時間間隔為 15 秒,網路用 15 秒時間創建區塊鏈,這樣一來,因為時間太快,系統的同步性就大大提升,惡意參與者很難在如此短的時間發動51%(也就是半數以上)的算力去修改歷史數據。
第二個信息點是:以太坊最初的設定中,希望通過階段性升級來最終實現由 PoW 向
PoS過渡的。
時間追溯到 2014 年,在以太坊發布之初,團隊宣布將項目的發布分為四個階段,即 Froniter(前沿)、Homestead(家園)、Metropolis(大都會)和 Serenity(寧靜)。前三個階段共識機制採用 PoW(工作量證明機制),第四個階段切換到 PoS(權益證明機制)。
2015年7月30號,以太坊第一個階段「前沿」正式發布,這個階段只適用於開發者使用,開發人員可於在以太坊網路上編寫智能合約和去中心化應用程序 DAPP,礦工開始進入以太坊網路維護網路安全並挖礦得到以太幣。前沿版本類似於測試版,證明以太坊網路到底是不是可靠的。
2016年3月14日,以太坊進入到第二個階段「家園」,這一階段,以太坊提供了錢包功能,讓普通用戶也可以方便體驗和使用以太坊。其他方面沒有什麼明顯的技術提升,只是表明以太坊網路已經可以平穩運行。
2017 年 9 月,以太坊已經進行到第三個階段「大都會」。「大都會」由拜占庭和君士坦丁堡兩次升級組成,這個階段的的目標是希望能夠引入 PoW 和 PoS 的混合鏈模式,為 PoW向PoS的順滑過渡做准備。最近比較熱門的「以太坊君士坦丁堡升級」升級的就是這個,在君士坦丁堡升級中呢,以太坊將對底層協議和演算法做一些改變,來為實現 PoW 和
PoS奠定良好的基礎。
以太坊挖礦會得到對多少獎勵呢?贏得區塊創建競爭成功的礦工會得到這么幾項收入:
1、 靜態獎勵,5個以太坊;
2、 區塊內所花費的燃料成本,也就是Gas,這部分我們上一期內容講過;
3、 作為區塊組成部分,包含「叔區塊」的額外獎勵,叔就是叔叔的叔,每個叔區塊可以得到挖礦報酬的1/32作為獎勵,也就是5乘以1/32,等於0.15625 個以太坊。這里我們簡單解釋一下「叔區塊」,「叔區塊」這個概念是以太坊提出來的,為什麼要引進叔塊的概念?這還要從比特幣說起。在比特幣協議中,最長的鏈被認為是絕對的正確。如果一個塊不是最長鏈的一部分,那麼它被稱為是「孤塊」。一個孤立的塊是一個塊,它也是合法的,但是可能發現的稍晚,或者是網路傳輸稍慢,而沒有能成為最長的鏈的一部分。在比特幣中,孤塊沒有意義,隨後將被拋棄掉,發現這個孤塊的礦工也拿不到采礦相關的獎勵。
但是,以太坊不認為孤塊是沒有價值的,以太坊系統也會給與發現孤塊的礦工回報。在以太坊中,孤塊被稱為「叔塊」(uncle block),它們可以為主鏈的安全作出貢獻。 以太坊十幾秒的出塊間隔太快了,會降低安全性,通過鼓勵引用叔塊,使引用主鏈獲得更多的安全保證(因為孤塊本身也是合法的) ,而且,支付報酬給叔塊,還能激發礦工積極挖礦,積極引用叔塊,所以,以太坊認為,它是有價值的。
B. 011:Ethash演算法|《ETH原理與智能合約開發》筆記
待字閨中開發了一門區塊鏈方面的課程:《深入淺出ETH原理與智能合約開發》,馬良老師講授。此文集記錄我的學習筆記。
課程共8節課。其中,前四課講ETH原理,後四課講智能合約。
第四課分為三部分:
這篇文章是第四課第一部分的學習筆記:Ethash演算法。
這節課介紹的是以太坊非常核心的挖礦演算法。
在介紹Ethash演算法之前,先講一些背景知識。其實區塊鏈技術主要是解決一個共識的問題,而共識是一個層次很豐富的概念,這里把范疇縮小,只討論區塊鏈中的共識。
什麼是共識?
在區塊鏈中,共識是指哪個節點有記賬權。網路中有多個節點,理論上都有記賬權,首先面臨的問題就是,到底誰來記帳。另一個問題,交易一定是有順序的,即誰在前,前在後。這樣可以解決雙花問題。區塊鏈中的共識機制就是解決這兩個問題,誰記帳和交易的順序。
什麼是工作量證明演算法
為了決定眾多節點中誰來記帳,可以有多種方案。其中,工作量證明就讓節點去算一個哈希值,滿足難度目標值的勝出。這個過程只能通過枚舉計算,誰算的快,誰獲勝的概率大。收益跟節點的工作量有關,這就是工作量證明演算法。
為什麼要引入工作量證明演算法?
Hash Cash 由Adam Back 在1997年發表,中本聰首次在比特幣中應用來解決共識問題。
它最初用來解決垃圾郵件問題。
其主要設計思想是通過暴力搜索,找到一種Block頭部組合(通過調整nonce)使得嵌套的SHA256單向散列值輸出小於一個特定的值(Target)。
這個演算法是計算密集型演算法,一開始從CPU挖礦,轉而為GPU,轉而為FPGA,轉而為ASIC,從而使得算力變得非常集中。
算力集中就會帶來一個問題,若有一個礦池的算力達到51%,則它就會有作惡的風險。這是比特幣等使用工作量證明演算法的系統的弊端。而以太坊則吸取了這個教訓,進行了一些改進,誕生了Ethash演算法。
Ethash演算法吸取了比特幣的教訓,專門設計了非常不利用計算的模型,它採用了I/O密集的模型,I/O慢,計算再快也沒用。這樣,對專用集成電路則不是那麼有效。
該演算法對GPU友好。一是考慮如果只支持CPU,擔心易被木馬攻擊;二是現在的顯存都很大。
輕型客戶端的演算法不適於挖礦,易於驗證;快速啟動
演算法中,主要依賴於Keccake256 。
數據源除了傳統的Block頭部,還引入了隨機數陣列DAG(有向非循環圖)(Vitalik提出)
種子值很小。根據種子值生成緩存值,緩存層的初始值為16M,每個世代增加128K。
在緩存層之下是礦工使用的數據值,數據層的初始值是1G,每個世代增加8M。整個數據層的大小是128Bytes的素數倍。
框架主要分為兩個部分,一是DAG的生成,二是用Hashimoto來計算最終的結果。
DAG分為三個層次,種子層,緩存層,數據層。三個層次是逐漸增大的。
種子層很小,依賴上個世代的種子層。
緩存層的第一個數據是根據種子層生成的,後面的根據前面的一個來生成,它是一個串列化的過程。其初始大小是16M,每個世代增加128K。每個元素64位元組。
數據層就是要用到的數據,其初始大小1G,現在約2個G,每個元素128位元組。數據層的元素依賴緩存層的256個元素。
整個流程是內存密集型。
首先是頭部信息和隨機數結合在一起,做一個Keccak運算,獲得初始的單向散列值Mix[0],128位元組。然後,通過另外一個函數,映射到DAG上,獲取一個值,再與Mix[0]混合得到Mix[1],如此循環64次,得到Mix[64],128位元組。
接下來經過後處理過程,得到 mix final 值,32位元組。(這個值在前面兩個小節《 009:GHOST協議 》、《 010:搭建測試網路 》都出現過)
再經過計算,得出結果。把它和目標值相比較,小於則挖礦成功。
難度值大,目標值小,就越難(前面需要的 0 越多)。
這個過程也是挖礦難,驗證容易。
為防止礦機,mix function函數也有更新過。
難度公式見課件截圖。
根據上一個區塊的難度,來推算下一個。
從公式看出,難度由三部分組成,首先是上一區塊的難度,然後是線性部分,最後是非線性部分。
非線性部分也叫難度炸彈,在過了一個特定的時間節點後,難度是指數上升。如此設計,其背後的目的是,在以太坊的項目周期中,在大都會版本後的下一個版本中,要轉換共識,由POW變為POW、POS混合型的協議。基金會的意思可能是使得挖礦變得沒意思。
難度曲線圖顯示,2017年10月,難度有一個大的下降,獎勵也由5個變為3個。
本節主要介紹了Ethash演算法,不足之處,請批評指正。
C. 一文了解以太坊礦機及挖礦原理
在以前的文章中,我們分別了解了比特幣挖礦和以太坊挖礦的區別。本文重點介紹以太坊挖礦及礦機部分。
以太坊是一個開源的有智能合約功能的公共區塊鏈平台,通過其專用加密貨幣ETH提供去中心化的以太虛擬機來處理點對點合約。目前ETH的挖礦主要是通過顯卡礦機,所謂顯卡礦機,其實就是類似家用台式機,只不過每台機器裡面有6-10張顯卡,並且沒有顯示器(如圖)。
圖:顯卡礦機
之所以以太坊沒有發展出類似於BTC一樣的ASIC礦機,主要是由於ETH的特殊挖礦機制決定的。
在ETH挖礦過程中,會產生一個DAG文件,該文件需要一直被調用,因此必須有專門的存儲空間放置。這個對於存儲空間的硬性需求會導致即使生產出來了ASIC晶元,也並不能大幅度降低單位算力的成本。簡單來說,就是性價比很差。
以太坊的DAG大小自2016年6月份引入Dagger-Hashimoto 演算法時的1GB開始,以每年約520MB的速度增大到了現在的 3.7G,預計2020年底以太坊的DAG大小將增加至4G。屆時,顯存小於4G的顯卡都將被陸續淘汰。
還需要介紹一點的是,由於顯卡礦機的體積通常是比特幣礦機的2-4倍,而消耗的電力卻只有比特幣礦機的1/2甚至更低,這就導致一般人不願意修建專門的顯卡礦機礦場(因為礦場主要賺取的是電費差價,同樣面積的場地,可以放置的顯卡數量少,消耗的電量更少)。即使有少量的顯卡礦場,收取的電費成本通常也比比特幣礦機礦場的高。
D. 一文了解以太坊挖礦演算法及算力規模2020-09-09
以太坊網路中,想要獲得以太坊,也要通過挖礦來實現。當前以太坊也是採用POW共識機制,但是與比特幣的POW挖礦有點不一樣,以太坊挖礦難度是可以調節的。以太坊系統有一個特殊的公式用來計算之後的每個塊的難度。如果某個區塊比前一個區塊驗證的更快,以太坊協議就會增加區塊的難度。通過調整區塊難度,就可以調整驗證區塊所需的時間。
以太坊採用的是Ethash 加密演算法,在挖礦的過程中,需要讀取內存並存儲 DAG 文件。由於每一次讀取內寸的帶寬都是有限的,而現有的計算機技術又很難在這個問題上有質的突破,所以無論如何提高計算機的運算效率,內存讀取效率仍然不會有很大的改觀。因此,從某種意義上來說,以太坊的Ethash加密演算法具有「抗ASIC性」。
加密演算法的不同,導致了比特幣和以太坊的挖礦設備、算力規模差異很大。
目前,比特幣挖礦設備主要是專業化程度非常高的ASIC 礦機,單台礦機的算力最高達到了 112T/s(神馬M30S++礦機),全網算力的規模達到139.92EH/s。
以太坊的挖礦設備主要是顯卡礦機和定製GPU礦機,專業化的ASIC礦機非常少,一方面是因為以太坊挖礦演算法的「抗 ASIC 性」提高了研發ASIC礦機的門檻,另一方面是因為以太坊升級到2.0之後共識機制會轉型為PoS,礦機無法繼續挖。
和ASIC礦機相比,顯卡礦機在算力上相差了2個量級。目前,主流的顯卡礦機(8卡)算力約為420MH/s,比較領先的定製GPU礦機算力約在500M~750M,以太坊全網算力約為235.39TH/s。
從過去兩年的時間維度上看,以太坊的全網算力增長相對緩慢。
以太坊協議規定,難度的動態調整方式是使全網創建新區塊的時間間隔為15秒,網路用15秒時間創建區塊鏈,這樣一來,因為時間太快,系統的同步性就大大提升,惡意參與者很難在如此短的時間發動51%(也就是半數以上)的算力去修改歷史數據。