在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 什么是挖礦和Ethash算法?
創(chuàng)建安全多簽名錢包及高級(jí)設(shè)置
以太坊發(fā)展歷史回顧
如何使用CPU挖礦?
導(dǎo)入預(yù)售錢包,更新、備份、恢復(fù)賬號(hào)
錢包、以太幣、Gas介紹
公有鏈、聯(lián)盟鏈、私有鏈及網(wǎng)絡(luò)配置介紹
以太坊客戶端的選擇與安裝
以太坊社區(qū)、基金會(huì)、貢獻(xiàn)者介紹
以太坊賬戶管理
什么是挖礦和Ethash算法?
如何使用Homestead文檔及以太坊路線圖
如何使用GPU和礦池挖礦?
以太坊是什么?
Web 3:去中心化應(yīng)用平臺(tái)
什么是以太幣?如何獲???
以太坊Go、Java、Python、Ruby、JS客戶端介紹
搭建測試網(wǎng)絡(luò)和私有鏈
以太坊C++客戶端的安裝與定制(一)

什么是挖礦和Ethash算法?

文章出于:http://wangxiaoming.com/blog/2016/07/11/e18/

挖礦簡介

挖礦這個(gè)詞源于對(duì)加密貨幣與黃金的類比。黃金或貴金屬很稀有,電子代幣也是,增加總量的唯一方法就是挖礦。以太坊也是這樣,發(fā)行的唯一辦法就是挖礦。但是不像其他例子,挖礦也是通過在區(qū)塊鏈中創(chuàng)建、驗(yàn)證、發(fā)行和傳播區(qū)塊來保護(hù)網(wǎng)絡(luò)的方法。

  • 挖以太幣=保護(hù)網(wǎng)絡(luò)=驗(yàn)證計(jì)算

什么是挖礦?

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

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

使用的工作量證明算法叫Ethash(Dagger-Hashimoto算法的改良版本),包括找到算法的隨機(jī)數(shù)輸入以使結(jié)果低于特定的難度閾值。工作量證明算法的意義在于,要找到這樣一個(gè)隨機(jī)數(shù),沒有比列舉可能性更好的策略,而解決方法的驗(yàn)證瑣碎又廉價(jià)。由于輸出有均勻分布(是散表功能應(yīng)用的結(jié)果),我們可以保證,平均而言,需要找到這樣一個(gè)隨機(jī)數(shù)的時(shí)間取決于難度閾值。這使得只通過操縱難度來控制找到新區(qū)塊的時(shí)間成為可能。

正如協(xié)議中所描述的,難度動(dòng)態(tài)調(diào)整的方式是每15秒整個(gè)網(wǎng)絡(luò)會(huì)產(chǎn)生一個(gè)區(qū)塊。我們說網(wǎng)絡(luò)用15秒?yún)^(qū)塊時(shí)間生產(chǎn)一個(gè)區(qū)塊鏈。這個(gè)"心跳"基本上主要強(qiáng)調(diào)系統(tǒng)狀態(tài)同步,保證不可能維持一個(gè)分叉(允許double spend)或被惡意分子重寫歷史,除非攻擊者有半數(shù)以上的網(wǎng)絡(luò)挖礦能力(即所謂的51%攻擊)。

任何參與到網(wǎng)絡(luò)的節(jié)點(diǎn)都可能是礦工,預(yù)期的挖礦收益和他們的(相對(duì))挖礦能力或者說成正比,比如被網(wǎng)絡(luò)總散表率標(biāo)準(zhǔn)化的,每秒嘗試的隨機(jī)數(shù)數(shù)量。

Ethash工作量證明是內(nèi)存難解的,這使它能抵抗ASIC。內(nèi)存難解性由工作量證明算法實(shí)現(xiàn),需要選擇依靠隨機(jī)數(shù)和區(qū)塊標(biāo)題的固定資源的子集合。這個(gè)資源(幾十億字節(jié)大小的數(shù)據(jù))叫做DAG。每3000個(gè)區(qū)塊的DAG完全不同,125小時(shí)的窗口叫做epoch(大約5.2天),需要一點(diǎn)時(shí)間來生成。由于DAG只由區(qū)塊高度決定,它可以被事先生成,如果沒有被事先生成,客戶端需要等到進(jìn)程最后來生產(chǎn)區(qū)塊。如果客戶端沒有預(yù)生成并提前緩存DAG,網(wǎng)絡(luò)可能會(huì)在每個(gè)epoch過渡經(jīng)歷大規(guī)模區(qū)塊延遲。注意不必要生成DAG以驗(yàn)證工作量證明,它可以在低CPU和小內(nèi)存的狀態(tài)下被驗(yàn)證。

在特殊情況下,從零開始創(chuàng)建節(jié)點(diǎn)的時(shí)候,只有在為現(xiàn)存epoch創(chuàng)建DAG的時(shí)候才會(huì)開始挖礦。

挖礦獎(jiǎng)勵(lì)

獲獎(jiǎng)區(qū)塊的成功工作量證明礦工會(huì)獲得:

  • "獲勝"區(qū)塊的靜態(tài)區(qū)塊獎(jiǎng),包含5.0(5個(gè))以太幣
  • 區(qū)塊內(nèi)支出的gas成本 — 一定數(shù)量的以太幣,取決于當(dāng)前gas價(jià)格
  • 叔伯塊的額外獎(jiǎng)勵(lì),形式是每個(gè)叔伯塊包含額外的1/32

在區(qū)塊中執(zhí)行所有交易所消費(fèi)的、由獲勝礦工提交的gas都由每個(gè)交易的發(fā)送者支付。已發(fā)生的gas成本歸到礦工賬戶作為共識(shí)協(xié)議的一部分。隨著時(shí)間變化,這會(huì)使數(shù)據(jù)區(qū)塊獎(jiǎng)變得矮小。

叔伯塊是穩(wěn)定的區(qū)塊,比如說,和包含先前區(qū)塊(最多回6個(gè)區(qū)塊)的父區(qū)塊。有效的叔伯塊會(huì)受到獎(jiǎng)勵(lì)以中和網(wǎng)絡(luò)滯后給挖礦獎(jiǎng)勵(lì)帶來的影響,因而提升安全性(這叫做GHOST協(xié)議)。叔伯塊由成功工作量證明礦工形成的區(qū)塊中所包含的叔伯塊接收7/8的數(shù)據(jù)區(qū)塊獎(jiǎng)勵(lì)(=4.375以太幣)。每個(gè)區(qū)塊最多允許2個(gè)叔伯塊。

  • reddit上的叔伯塊ELI5
  • 解釋叔伯塊的分論壇

挖礦的成功取決于設(shè)定的區(qū)塊難度。區(qū)塊難度動(dòng)態(tài)調(diào)整每個(gè)區(qū)塊,以規(guī)定網(wǎng)絡(luò)散列能力來創(chuàng)造12秒?yún)^(qū)塊時(shí)間。找到區(qū)塊的機(jī)會(huì)因此由與難度相關(guān)的散列率產(chǎn)生。

Ethash DAG

Ethash將DAG(有向非循環(huán)圖)用于工作量證明算法,這是為每個(gè)epoch生成,例如,每3000個(gè)區(qū)塊(125個(gè)小時(shí),大約5.2天)。DAG要花很長時(shí)間生成。如果客戶端只是按需要生成它,那么在找到新epoch第一個(gè)區(qū)塊之前,每個(gè)epoch過渡都要等待很長時(shí)間。然而,DAG只取決于區(qū)塊數(shù)量,所以可以預(yù)先計(jì)算來避免在每個(gè)epoch過渡過長的等待時(shí)間。Geth和ethminer執(zhí)行自動(dòng)的DAG生成,每次維持2個(gè)DAG以便epoch過渡流暢。挖礦從控制臺(tái)操控的時(shí)候,自動(dòng)DAG生成會(huì)被打開和關(guān)閉。如果geth用—mine選項(xiàng)啟動(dòng)的時(shí)候,也會(huì)默認(rèn)打開。注意客戶端分享DAG資源,如果你運(yùn)行任何客戶端的多個(gè)實(shí)例,確保自動(dòng)的DAG生成只在一個(gè)實(shí)例中打開。

為任意epoch生成DAG:

geth makedag <block number> <outputdir>

實(shí)例geth makedag 360000 ~/.ethash.。請注意ethash為DAG使用~/.ethash (Mac/Linux) 或~/AppData/Ethash (Windows),這樣它可以在不同的客戶端實(shí)現(xiàn)以及多個(gè)運(yùn)行實(shí)例中分享。

算法

我們的算法,Ethash(之前被稱為Dagger-Hashimoto),是基于一個(gè)大的、瞬時(shí)的、任意生成的、形成DAG(Dagger-part)的資料組規(guī)定,嘗試解決它一個(gè)特定的約束,部分通過區(qū)塊標(biāo)題散列來決定。

它被設(shè)計(jì)用于在一個(gè)只有慢CPU的環(huán)境中來散列快速驗(yàn)證時(shí)間,但在被提供大量高帶寬內(nèi)存時(shí),為挖礦提供大量的加速。大量內(nèi)存需求意味著大規(guī)模礦工獲得相對(duì)少的超線性利益。高帶寬需求意味著從堆在很多超速處理單元、分享同樣內(nèi)存的加速在每個(gè)單獨(dú)的單元給出很少的利益(譯者注:通過阻止專用芯片共享內(nèi)存的方式,降低礦機(jī)的作用)。

沒有節(jié)點(diǎn)驗(yàn)證的利益因而阻礙中心化,這在挖礦中很重要。

外部挖礦應(yīng)用和以太坊工作規(guī)定和報(bào)送的后臺(tái)程序之間的交流通過JSON-RPC API發(fā)生。提供兩個(gè)RPC功能;eth_getWork和eth_submitWork。

這些被正式記錄在JSON-RPC API維基百科文章的礦工條目下。

為了挖礦你需要一個(gè)完全同步的、能夠挖礦的以太坊客戶端和至少一個(gè)以太坊賬戶。這個(gè)賬戶用于發(fā)送挖礦獎(jiǎng)勵(lì),通常被稱為貨幣基或以太基。查看這個(gè)說明的"創(chuàng)建帳戶"章節(jié),學(xué)習(xí)如何創(chuàng)建帳戶。

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