以太坊是怎么挖出來的(以太坊挖礦的原理,你知道多少?)
PoW的概念最早來自于比特幣網絡,和人們通常說的“挖礦”一詞緊緊聯系在一起。我們知道在現實生活中,黃金或其他稀有貴金屬需要通過辛苦的挖礦勞動獲得。在以太坊區塊鏈網絡中,數字貨幣一樣是稀有資源,也是通過挖礦獲得。
然而,與黃金和貴金屬挖礦不同的是,數字貨幣的挖礦同時能起到構建、驗證、請求和傳播區塊的目的,表達為:以太幣挖礦 = 保障網絡安全 = 計算驗證以太坊通過PoW選擇總難度最大的區塊為有效區塊。礦工節點負責生產區塊,其他節點負責驗證區塊。任何加入以太坊網絡的節點都可以成為礦工。礦工通過挖礦獲得的收入大致與相對全網的歸一化算力(hashrate)成正比。以太坊按照區塊的數據形式來維護交易列表和最近狀態。區塊號和難度系數存儲在區塊頭中。以太坊中的PoW算法也稱為Ethash算法(即Dagger-Hashimoto算法的改進版)。
礦工節點通過快速計算試圖找到一個合適的Nonce值,使得通過運算得到的結果低于特定的難度門限。PoW的要領在于除了枚舉之外很難找到更好的方法來獲得合適的Nonce值,而驗證這個值是否滿足要求是很容易的。因為hash函數的輸出數字滿足均勻分布,所以我們可以保證在平均意義上,得到合適Nonce值的時間與設定的難度值有關。
因此,網絡可以通過調整難度系數來控制出塊時間。難度系數是動態調整的,以保證全網的平均出塊時間維持在15秒左右。這樣的心跳周期保證了系統狀態的正常同步,同時也排除了出現分叉或篡改歷史數據的可能。除非攻擊者能擁有全網算力的一半以上(即51%攻擊)。Ethash算法的瓶頸在于內存讀寫性能,即礦工無法通過使用更快的硬件如ASIC、FPGA來提高挖礦。
以太坊網絡節點可以使用CPU挖礦來獲得以太幣獎勵。這種挖礦方式已經很難賺錢,因為GPU挖礦大致比CPU挖礦的效率高兩個量級。但是,在Morden測試網絡或者私有鏈上仍然可以通過CPU挖礦來獲得以太幣獎勵,用于測試合約和交易。當用戶使用命令行工具geth來接入以太坊網絡時,并不會默認打開挖礦。通常需要使用—mine選項來開啟CPU挖礦模式,使用—minerthreads參數來設置并行挖礦的線程數目。挖礦算法需要消耗大量內存,使用GPU挖礦時,每個GPU生成DAG時正常需要1~2G的RAM內存空間。如果程序返回“Error GPU mining. GPU memoryfragmentation? ”報錯,則表示硬件無法獲得足夠的內存。GPU挖礦是基于OpenCL實現的,所以AMD的GPU會比同樣規格的NVIDIA的GPU工作更快。ASIC和FPGA相對效率更低,因此不建議使用。
綜上所述,以太坊使用的PoW算法變更了Dagger-Hashimoto算法的原有特性,設計思路遵循如下幾點:通過掃描區塊頭的數據來計算種子值。根據種子輸入能夠得到16M字節尺寸的偽隨機緩存。輕客戶端會存儲這段緩存。根據緩存能夠得到1G字節尺寸的數據集,數據集中的每個元素依賴于緩存中的一小部分輸入。全節點和礦工需要保存數據集。數據集所占空間隨著時間推移線性增長。挖礦的過程就是從數據集中抽取隨機切片并計算hash值的過程。區塊驗證則只需要很小的內存,通過緩存中的數據來生成特定的數據集切片。因此,驗證節點僅需要存儲緩存。
比特幣今日行情
#歐易OKEx##比特幣[超話]##數字貨幣#