當前位置:首頁 » 以太坊知識 » 以太坊原理及實現

以太坊原理及實現

發布時間: 2024-06-21 23:25:39

A. 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演算法,不足之處,請批評指正。

B. 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),它們可以為主鏈的安全作出貢獻。 以太坊十幾秒的出塊間隔太快了,會降低安全性,通過鼓勵引用叔塊,使引用主鏈獲得更多的安全保證(因為孤塊本身也是合法的) ,而且,支付報酬給叔塊,還能激發礦工積極挖礦,積極引用叔塊,所以,以太坊認為,它是有價值的。

C. 浠ュお甯佹槸鎬庝箞鏍


浠ュお甯佹槸鎬庝箞
浠ュお甯佹槸涓縐嶆暟瀛楄揣甯侊紝瀹冩槸鍩轟簬浠ュお鍧婂尯鍧楅摼鎶鏈鍒涘緩鐨勩備互澶鍧婃槸涓縐嶅幓涓蹇冨寲鐨勮$畻騫沖彴錛屽厑璁稿紑鍙戜漢鍛樺壋寤哄垎鏁e簲鐢ㄧ▼搴忥紙DApps錛夊拰鏅鴻兘鍚堢害銆
浠ュお甯佺殑宸ヤ綔鍘熺悊綾諱技浜庢瘮鐗瑰竵錛屼絾瀹冨叿鏈夋洿澶氱殑鍔熻兘銆備互澶甯佹槸閫氳繃鈥滄寲鐭庫濆壋寤虹殑錛岃繖鏄涓縐嶄嬌鐢ㄨ$畻鏈虹畻鍔涜В鍐蟲暟瀛﹂毦棰樼殑榪囩▼銆傝繖浜涢棶棰樿縐頒負鈥滃伐浣滈噺璇佹槑鈥濓紙ProofofWork錛夛紝姣忓綋涓涓闂棰樿瑙e喅鏃訛紝涓瀹氭暟閲忕殑浠ュお甯佸氨浼氳鐢熸垚騫跺栧姳緇欑熆宸ャ
浠ュお甯佹槸涓縐嶆湁闄愮殑璐у竵錛岀洰鍓嶉勮℃渶澶氬彲浠ュ彂琛1浜誇釜銆傝繖縐嶈揣甯佸彲浠ヨ鐢ㄤ綔鏀浠橈紝涔熷彲浠ヨ鐢ㄦ潵鏀浠樹互澶鍧婁笂鐨勬櫤鑳藉悎綰︽墽琛岃垂鐢ㄣ傛櫤鑳藉悎綰︽槸涓縐嶅湪浠ュお鍧婁笂榪愯岀殑浠g爜錛屽畠鍙浠ュ疄鐜板氱嶅姛鑳斤紝渚嬪備唬甯佸彂琛屻佹姇紲ㄣ佷紬絳圭瓑絳夈
浠ュお甯佺殑浜ゆ槗鏄鍦ㄤ互澶鍧婄綉緇滀腑榪涜岀殑錛岃繖涓榪囩▼鏄鍘諱腑蹇冨寲鐨勶紝鍥犳や氦鏄撹板綍鏄鍏寮鐨勶紝浣嗕笉娑夊強鐪熷疄韜浠戒俊鎮銆備氦鏄撶殑瀹夊叏鎬ф槸閫氳繃鍖哄潡閾炬妧鏈鐨勫姞瀵嗙畻娉曟潵淇濊瘉鐨勶紝榪欎嬌寰椾互澶甯佷氦鏄撻潪甯稿畨鍏ㄥ拰闅句互綃℃敼銆
鎬葷殑鏉ヨ達紝浠ュお甯佹槸涓縐嶅幓涓蹇冨寲鐨勬暟瀛楄揣甯侊紝鍏鋒湁鏇村氱殑鍔熻兘鍜屾洿騫挎硾鐨勫簲鐢ㄥ満鏅錛屽畠鍙浠ョ敤浜庢敮浠樺拰鏅鴻兘鍚堢害鎵ц岃垂鐢ㄣ

D. 浠涔堟槸浠ュお甯/浠ュお鍧奅TH錛

浠ュお鍧婏紙鑻辮錛欵thereum錛夋槸涓涓寮婧愮殑鏈夋櫤鑳藉悎綰﹀姛鑳界殑鍏鍏卞尯鍧楅摼騫沖彴銆傞氳繃鍏朵笓鐢ㄥ姞瀵嗚揣甯佷互澶甯侊紙Ether錛屽張縐扳滀互澶甯佲濓級鎻愪緵鍘諱腑蹇冨寲鐨勮櫄鎷熸満錛堢О涓衡滀互澶鉶氭嫙鏈衡滶thereum Virtual Machine錛夋潵澶勭悊鐐瑰圭偣鍚堢害銆

鍧婂尯鍧楅摼涓婄殑浠e竵縐頒負浠ュお甯侊紙Ether錛夛紝浠g爜涓篍TH錛屽彲鍦ㄨ稿氬姞瀵嗚揣甯佺殑澶栨眹甯傚満涓婁氦鏄擄紝瀹冧篃鏄浠ュお鍧婁笂鐢ㄦ潵鏀浠樹氦鏄撴墜緇璐瑰拰榪愮畻鏈嶅姟鐨勫獟浠嬨

浠ュお鍧婄殑姒傚康棣栨″湪2013鑷2014騫撮棿鐢辯▼搴忓憳Vitalik Buterin錛屽彈姣旂壒甯佸惎鍙戝悗鎻愬嚭錛屽ぇ鎰忎負鈥滀笅涓浠e姞瀵嗚揣甯佷笌鍘諱腑蹇冨寲搴旂敤騫沖彴鈥濓紝鍦2014騫撮氳繃ICO浼楃瑰緱浠ュ紑濮嬪彂灞曘傛埅鑷2018騫2鏈堬紝浠ュお甯佹槸甯傚肩浜岄珮鐨勫姞瀵嗚揣甯侊紝浠呮′簬姣旂壒甯併

璧勬枡鎷撳睍錛

浠ュお鍧婃渶鍒濈敱 Vitalik Buterin 鍦2013騫存彁鍑恆俈italik 鏈鏄涓鍚嶅弬涓庢瘮鐗瑰竵紺懼尯鐨勭▼搴忓憳錛屾浘鍚戞瘮鐗瑰竵鏍稿績寮鍙戜漢鍛樹富寮犳瘮鐗瑰竵騫沖彴搴旇ヨ佹湁涓鏇村畬鍠勭殑緙栫▼璇璦璁╀漢寮鍙戠▼搴忥紝浣嗘湭寰楀埌浠栦滑鐨勫悓鎰忥紝鍥犳ゅ喅瀹氬紑鍙戜竴涓鏂扮殑騫沖彴浣滄ょ敤閫斻侭uterin 璁や負寰堝氱▼搴忛兘鍙浠ョ敤綾諱技姣旂壒甯佺殑鍘熺悊鏉ヨ揪鎴愯繘涓姝ョ殑鍙戝睍銆侭uterin 鍦2013騫村啓涓嬩簡銆婁互澶鍧婄櫧鐨涔︺嬶紝璇存槑浜嗗緩閫犲幓涓蹇冨寲紼嬪簭鐨勭洰鏍囥傜劧鍚2014騫撮氳繃緗戠粶鍏寮鍕熻祫寰楀埌寮鍙戠殑璧勯噾錛屾姇璧勪漢鐢ㄦ瘮鐗瑰竵鍚戝熀閲戜細璐涔頒互澶甯併

鏈鍒濅互澶鍧婄▼搴忔槸鐢變竴闂翠綅鍦ㄧ憺澹鐨勫叕鍙 Ethereum Switzerland GmbH 寮鍙戱紝涔嬪悗杞縐昏嚦涓涓闈炶惀鍒╂満鏋勨滀互澶鍧婂熀閲戜細鈥濓紙Ethereum Foundation錛夈

鐜板湪浠ュお鍧婃寲鐭挎敹鐩婅繖涔堥珮錛屾墜鏈虹湡鐨勫彲浠ユ寲鍒頒互澶鍧婂悧錛

浠ュお鍧婄殑鎸栫熆榪囩▼涓庢瘮鐗瑰竵鐨勫嚑涔庢槸涓鏍風殑銆侲TH閫氳繃鎸栫熆浜х敓錛屽鉤鍧囨瘡15縐掍駭鐢1涓鍧楋紝鎸栫熆鐨勬椂鍊欙紝鐭垮伐浣跨敤璁$畻鏈哄幓璁$畻涓閬撳嚱鏁拌$畻棰樼殑絳旀堬紝鐩村埌鏈夌熆宸ヨ$畻鍒版g『絳旀堝嵆瀹屾垚鍖哄潡鐨勬墦鍖呬俊鎮錛岃屼綔涓虹涓涓璁$畻鍑烘潵鐨勭熆宸ュ皢浼氬緱鍒3鏋欵TH鐨勫栧姳銆

濡傛灉鐭垮伐A鐜囧厛綆楀嚭姝g『鐨勭瓟妗堬紝閭d箞鐭垮伐A灝嗚幏寰椾互澶甯佷綔涓哄栧姳錛屽苟鍦ㄥ叏緗戝箍鎾鍛婅瘔鎵鏈夌熆宸モ滄垜宸茬粡鎶婄瓟妗堢畻鍑烘潵浜嗏濆苟璁╂墍鏈夊湪絳旈樼殑鐭垮伐浠榪涜岄獙璇佸苟鏇存柊姝g『絳旀堛傚傛灉鐭垮伐B綆楀嚭姝g『絳旀堬紝閭d箞鍏朵粬鐭垮伐灝嗕細鍋滄㈠綋鍓嶇殑瑙i樿繃紼嬶紝璁板綍姝g『絳旀堬紝騫跺紑濮嬪仛涓嬩竴閬撻橈紝鐩村埌綆楀嚭姝g『絳旀堬紝騫朵竴鐩撮噸澶嶆よ繃紼嬨

鐭垮伐鍦ㄨ繖涓娓告垙涓寰堥毦浣滃紛銆備粬浠鏄娌℃硶浼瑁呭伐浣滃張寰楀嚭姝g『絳旀堛傝繖灝辨槸涓轟粈涔堣繖涓瑙i樼殑榪囩▼琚縐頒負鈥滃伐浣滈噺璇佹槑鈥濓紙POW錛夈

瑙i樼殑榪囩▼澶х害姣12-15縐掞紝鐭垮伐灝變細鎸栧嚭涓涓鍖哄潡銆傚傛灉鐭垮伐鎸栫熆鐨勯熷害榪囧揩鎴栬呰繃鎱錛岀畻娉曚細鑷鍔ㄨ皟鏁撮樼洰鐨勯毦搴︼紝鎶婂嚭鍧楅熷害淇濇寔鍦13縐掑乏鍙熾

鐭垮伐鑾峰彇榪欎簺ETH甯佹槸鏈夐殢鏈烘х殑錛屾寲鐭跨殑鏀剁泭鍙栧喅浜庢姇鍏ョ殑綆楀姏錛屽氨鐩稿綋浣犵殑璁$畻鏈鴻秺澶氾紝浣犵瓟棰樼殑姝g『鐨勬傜巼涔熷氨瓚婇珮錛屾洿瀹規槗鑾峰緱鍖哄潡濂栧姳銆

鎵嬫満緇濆逛笉鍙鑳芥寲鍒頒互澶鍧婏紝鍥犱負浠ュお鍧婂彧鑳介氳繃鐢佃剳鏄懼崱鏉ユ寲鐭褲

浠ュお鍧婃寲鐭跨殑鐭挎疆紜瀹為潪甯哥伀鐑錛屽艱嚧寰堝氫粠鏉ユ病鏈夊弬涓庤繃鉶氭嫙璐у竵鎶曡祫鐨勪漢涔熷弬涓庤繘鏉ャ備粠鏌愮嶇▼搴︿笂鏉ヨ達紝褰撹秺鏉ヨ秺澶氱殑浜哄紑濮嬭窡椋庣殑鏃跺欙紝榪欎釜鏃跺欑殑琛屾儏鍙嶈屼細姣旇緝鍗遍櫓銆備互澶鍧婃寲鐭挎湰韜闇瑕佷竴瀹氱殑鎶曡祫鎴愭湰錛岃繖嬈$殑鐭挎疆鍙鑳戒細瀵艱嚧寰堝氫漢鍑虹幇閲嶅ぇ浜忔崯錛屾墍浠ユ垜涓嶅緩璁澶у剁洸鐩鍙備笌榪涙潵銆

涓銆佷互澶鍧婃寲鐭垮惛寮曚簡寰堝氫漢鐨勫叧娉ㄣ

鍦ㄨ繖涓嬈¤櫄鎷熻揣甯佺殑鐗涘競褰撲腑錛屾垜浠鍙浠ョ湅鍒頒互澶鍧婄殑琛ㄧ幇鐗瑰埆濂姐傚洜涓轟互澶鍧婃湰韜闇瑕丳OW鐨勬寲鐭匡紝鏈変簺浜哄紑濮嬫敹闆嗘樉鍗℃潵涓撻棬鎸栦互澶鍧娿備粠鏌愮嶇▼搴︿笂鏉ヨ達紝浠ュお鍧婃寲鐭跨『瀹炴瘮鐐掍綔鉶氭嫙璐у竵寮轟竴浜涳紝浣嗕緷鐒舵湁寰堝ぇ鐨勬姇璧勯庨櫓錛屾瘯絝熺洰鍓嶇殑鏄懼崱鎴愭湰鐗瑰埆楂樸

浜屻佷互澶鍧婁笉鑳介氳繃鎵嬫満鏉ユ寲銆

浠ュお鍧婃寲鐭跨殑妯″紡鏈韜鏄宸ヤ綔閲忕殑璇佹槑錛岃繖涓宸ヤ綔閲忛渶瑕侀氳繃鏄懼崱鐨勮$畻鏉ヨ幏寰椼備絾鍑′竴涓浜哄硅櫄鎷熻揣甯佹湁鎵浜嗚В錛岃繖涓浜哄氨涓嶄細鐩鎬俊鎵嬫満鍙浠ユ寲浠ュお鍧娿傚傛灉涓涓浜鴻〃紺哄彲浠ョ敤鎵嬫満鐜╀互澶鍧婏紝榪100%鏄楠楀矓錛屼綘瑕佸皬蹇冭皚鎱庛備互澶鍧婄洰鍓嶇殑琛屾儏闈炲父鐏鐑錛屾垜涔熷緩璁澶у跺皬蹇冪湅寰呭綋鍓嶇殑琛屾儏錛屼竴瀹氫笉瑕佺洸鐩璺熼庛

涓夈佷互澶鍧婂彲浠ラ氳繃鐢佃剳鏄懼崱鏉ユ寲鐭褲

灝卞儚鎴戝湪涓婇潰鎵璁茬殑閭f牱錛屼互澶鍧婃寲鐭跨殑宸ヤ綔閫昏緫灝辨槸宸ヤ綔閲忚瘉鏄庯紝鎵浠ラ渶瑕侀氳繃鏄懼崱鏉ヨ幏寰椾互澶鍧婄殑浠e竵銆傚傛灉浣犱箣鍓嶄粠鏉ユ病鏈夊弬涓庤繃浠ュお鍧婃寲鐭匡紝鎴戜笉寤鴻浣犵幇鍦ㄥ弬涓庤繘鏉ャ傛渶蹇鍦ㄥ勾搴曠殑鏃跺欙紝浠ュお鍧婁細浠庝箣鍓嶇殑宸ヤ綔閲忚瘉鏄庤漿鍖栦負鏉冪泭璇佹槑錛岄偅涓鏃跺欏氨涓嶈兘閫氳繃鏄懼崱鏉ユ寲鐭誇簡銆傚傛灉浣犵幇鍦ㄩ夋嫨鍦ㄩ珮浣嶅弬涓庢姇璧勶紝寰堝彲鑳戒綘鐨勬湰閲戦兘鏀朵笉鍥炴潵銆

E. 浠ュお鍧婁腑Ghost鍗忚璇﹁В

浠ュお鍧婁腑鐨凣host鍗忚錛氳В鍐抽珮棰戠巼鍑哄潡甯︽潵鐨勬寫鎴



鍦ㄤ互澶鍧婄殑涓栫晫閲岋紝姣忎釜鍖哄潡鐨勮癁鐢熸爣蹇楃潃涓涓鏂版椂浠g殑寮鍚銆傜劧鑰岋紝騫沖潎15縐掔殑鍑哄潡鏃墮棿鐩歌緝浜庢瘮鐗瑰竵鐨10鍒嗛挓錛岃櫧鐒舵彁鍗囦簡緋葷粺鐨勫弽搴旈熷害鍜屽悶鍚愰噺錛屽嵈涔熷甫鏉ヤ簡鏂扮殑鎸戞垬鈥斺旈戠箒鐨勫垎鍙夈傝繖鏄涓鍦哄叧浜庢晥鐜囦笌紼沖畾鎬х殑鍗氬紙錛屽備綍鍦ㄥ揩閫熷嚭鍧楃殑鐜澧冧腑淇濇寔緋葷粺鐨勭З搴忎笌瀹夊叏鎬э紵絳旀堝氨闅愯棌鍦℅host鍗忚涔嬩腑銆



鍒嗗弶鐨勬牴婧愬湪浜庡揩閫熷嚭鍧楀甫鏉ョ殑鎸栫熆闅懼害闄嶄綆銆傛兂璞′竴涓嬶紝鐭垮伐Zarten1鍜孼arten2鍑犱箮鍚屾椂鍙戠幇鏂板尯鍧楋紝浣嗕俊鎮鍦ㄧ綉緇滀腑鐨勪紶鎾閫熷害鍙鑳芥參浜15縐掋傝繖灝卞艦鎴愪簡澶氫釜鍒嗗弶鐐癸紝姣忎釜鍒嗗弶鐐歸兘鏈夊彲鑳芥垚涓烘柊鐨勪富閾俱傚ぇ鍨嬬熆奼犵殑綆楀姏浼樺娍浣垮緱浠栦滑鏇村規槗鑾峰緱鏂板尯鍧楋紝浣嗚繖鍚屾椂涔熷姞澶т簡灝忕熆宸ョ殑鍥版壈鍜岀郴緇熺殑瀹夊叏椋庨櫓銆



Ghost鍗忚鐨勭櫥鍦



涓轟簡鎵撶牬榪欎竴鍍靛矓錛屼互澶鍧婂紩鍏ヤ簡Ghost錛圙reedy Heaviest Observed Subtree錛夊崗璁銆傝繖涓鍒涙柊鐨勮В鍐蟲柟妗堟簮浜嶻onatan Sompolinsky鍜孉viv Zohar鍦2013騫寸殑鏅烘収銆侴host鐨勬牳蹇冪悊蹇墊槸寮曞肩熆宸ヤ滑鍦ㄤ富閾句笂寤剁畫鎸栫熆錛岃岄潪鍦ㄥ垎鍙夌偣緇х畫絝炰簤錛屼粠鑰屽噺灝戜笉蹇呰佺殑鍒嗗弶銆



Ghost鍗忚鐨勫伐浣滃師鐞嗗備笅錛氬綋鍖哄潡A涔嬪悗鍑虹幇澶氫釜鍒嗗弶錛屽傚尯鍧梈arten鏈鍏堝彂甯冿紝瀹冨氨鏈夊彲鑳芥垚涓轟富閾俱傚傛灉鍚庣畫鐨勫尯鍧梈arten_a鑾峰緱鐭挎潈錛屽畠浼氶夋嫨鎺ョ撼Zarten1銆乑arten2銆乑arten3絳夊彅鐖跺潡錛岀粰浜堜竴瀹氱殑濂栧姳錛岄紦鍔變粬浠鏀懼純鍦ㄨ嚜宸辯殑鍒嗘敮涓婄戶緇鎸栫熆錛岃漿鑰屽姞鍏ヤ富閾俱傝繖鏍風殑鏈哄埗紜淇濅簡澶ч儴鍒嗙畻鍔涢泦涓鍦ㄤ富閾句笂錛岄檷浣庝簡榛戝㈡敾鍑葷殑鎴愭湰錛屽悓鏃舵縺鍙戜簡鐭垮伐鐨勭Н鏋佹с



鍦ㄥ栧姳鏈哄埗涓錛屽彅鐖跺潡鏄鍏抽敭銆傛瘡涓鍖哄潡鏈澶氭帴綰充袱涓鍙旂埗鍧楋紝涓斿栧姳閫掑噺錛岃窛紱昏秺榪滅殑鍙旂埗鍧楄幏寰楃殑濂栧姳瓚婂皯錛屼互姝ら紦鍔辯熆宸ュ敖鏃╁悎騫訛紝鍑忓皯鍒嗗弶銆備緥濡傦紝鎺ョ撼n涓鍙旂埗鍧楃殑鍖哄潡鍙浠ヨ幏寰楀嚭鍧楀栧姳鐨刵*1/32銆傝繖鏍風殑璁捐℃棦淇濊瘉浜嗙郴緇熺殑紼沖畾錛屽張騫寵浜嗗埄鐩婂垎閰嶃



鐪熷疄妗堜緥瑙f瀽



璁╂垜浠閫氳繃涓涓瀹炰緥鏉ョ悊瑙h繖涓澶嶆潅鏈哄埗銆傛煡鐪嬪尯鍧9634573錛岄氳繃Blockchain Explorer錛屾垜浠鐪嬪埌鍖呭惈涓涓鍙旂埗鍧楃殑鍖哄潡錛屽叾濂栧姳涓2.171342981784463037 ETH錛屽彅鐖跺潡鏈韜濂栧姳涓1.5 ETH銆傞氳繃璁$畻鍏寮忥紝鎴戜滑鍙浠ラ獙璇佸栧姳鐨勫噯紜鎬э細鍥哄畾鍑哄潡濂栧姳鍔犱笂鍖哄潡Gas璐圭敤鍜屽彅鐖跺潡濂栧姳鐨勬誨拰錛屼笌緗戠珯鏄劇ず鐨勫栧姳瀹屽叏鍚誨悎銆



Ghost鍗忚鐨勫疄鏂斤紝浣垮緱浠ュお鍧婂湪蹇閫熷嚭鍧楃殑鐜澧冧腑鎵懼埌浜嗗鉤琛°傚畠涓嶄粎鏄瀵圭幇鏈夐棶棰樼殑瑙e喅錛屼篃鏄浠ュお鍧婁笉鏂浼樺寲榪浠g殑浣撶幇錛岄勭ず鐫鏈鏉ユ洿楂樻晥銆佹洿瀹夊叏鐨勭綉緇滅幆澧冦傞氳繃鐞嗚В榪欎竴鍗忚錛屾垜浠鏇磋兘嬈h祻鍒頒互澶鍧婅儗鍚庣殑鎶鏈欖呭姏鍜屽伐紼嬪笀浠鐨勬櫤鎱с

F. 002:以太坊簡介|《ETH原理與智能合約開發》筆記

待字閨中開發了一門區塊鏈方面的課程:《深入淺出ETH原理與智能合約開發》,馬良老師講授。此文集記錄我的學習筆記。

課程共8節課。其中,前四課講ETH原理,後四課講智能合約。
第一課分為四部分:

這篇文章是第一部分的學習筆記:以太坊簡介。

以太坊是目前公認的區塊鏈2.0,相比於區塊鏈1.0(比特幣),其最大的特點是引入了智能合約,從而從單一的數字加密 Token 技術轉化為一個區塊鏈分布式應用的平台。以太坊本身不包含任何具體的應用,它主要是提供基礎平台和工具,使得開發者可以在其基礎之上開發出各種各樣的應用。可以說,以太坊有著巨大的潛力,它最終可能會發展出分布式、自動化、自組織的最高形態。

第一,我們可以通過學習以太坊的技術,領會區塊鏈技術發展的脈絡,改進的思路/路徑,從而緊跟區塊鏈技術發展的前沿,預測下一步的趨勢。
第二,DAPP(分布式應用)生態系統目前的發展也是蒸蒸日上,蓬勃發展,據不完全統計,現在有數百種應用之多,顯而易見的,對於開發人員的需求也是水漲船高,需要大量的開發人員。目前非常有名的應用有加密貓、各類側鏈應用、ERC20 Token如幣安幣火幣等等。

2013年,創始人 Vitalik Buterin 針對比特幣存在的一些問題以及局限性,提出把「智能合約」構想應用於區塊鏈領域,希望打造一個基於區塊鏈的多方計算的智能化通用平台,並通過比特幣融資進行開發。

2014年,以太坊基金會在瑞士成立,管理並運營整個項目。

前5大礦池佔83%的算力,很集中。

目前大約有16000個全節點,其中,美國5461(34%),中國1839(11.5%),俄羅斯963(6%),德國920(5.7%),加拿大875(5.45%)。全節點每天都有動態變化。分布情況也反映出各個國家的參與熱度。

G. 浠ュお鍧婃槸浠涔


浠ュお鍧婃槸浠涔堬紵浜嗚В浠ュお鍧婂尯鍧楅摼鎶鏈
浠ュお鍧婃槸鏈鐭ュ悕鐨勫尯鍧楅摼鎶鏈涔嬩竴錛岃瑾変負鍖哄潡閾炬妧鏈鐨勬湭鏉ャ傚畠鏄姣旂壒甯佸尯鍧楅摼鐨勪竴縐嶆敼榪涳紝騫跺叿鏈夋洿澶氱殑鍔熻兘鍜岀敤閫斻傛湰鏂囧皢涓烘偍浠嬬粛浠ュお鍧婃槸浠涔堬紝浠ュ強瀹冨備綍宸ヤ綔鍜屼嬌鐢ㄣ
浠涔堟槸浠ュお鍧婏紵
浠ュお鍧婃槸涓縐嶅紑鏀炬簮浠g爜鐨勫幓涓蹇冨寲騫沖彴錛屼嬌鐢ㄤ互澶鍧婃妧鏈鍙浠ュ疄鐜版櫤鑳藉悎綰﹀拰鍒嗗竷寮忓簲鐢ㄧ▼搴忋備互澶鍧婄殑鐩鏍囨槸涓哄紑鍙戜漢鍛樻彁渚涗竴涓瀹夊叏銆佺ǔ瀹氱殑騫沖彴錛岃╀粬浠鍙浠ヨ交鏉懼湴鍒涘緩鍜屼嬌鐢ㄥ幓涓蹇冨寲搴旂敤紼嬪簭銆傚畠鏄涓涓鍔熻兘寮哄ぇ鐨勫鉤鍙幫紝鍙浠ユ敼鍙橀噾鋙嶃佺ぞ浼氬拰鍟嗕笟棰嗗煙銆
浠ュお鍧婃槸濡備綍宸ヤ綔鐨勶紵
浠ュお鍧婄殑涓昏佸姛鑳芥槸瀹炵幇鏅鴻兘鍚堢害銆傛櫤鑳藉悎綰︽槸涓縐嶈嚜鍔ㄦ墽琛屼唬鐮佺殑鏂規硶銆傚叾鍩烘湰鎬濇兂鏄涓虹敤鎴鋒彁渚涗竴涓瀹夊叏鐨勫鉤鍙幫紝浠ヤ究浠栦滑鍙浠ュ壋寤哄拰浣跨敤鏅鴻兘鍚堢害銆傛櫤鑳藉悎綰﹀彲浠ヨ╀漢浠閫氳繃緙栧啓紼嬪簭鏉ュ疄鐜拌嚜鍔ㄥ寲浜ゆ槗錛屼粠鑰屼繚鎶や粬浠鍏嶅彈嬈鴻瘓鍜屽叾浠栦笉鑹琛屼負鐨勫獎鍝嶃
浜掕仈緗戠殑瀹夊叏鏄浠ュお鍧婄殑涓昏佽冭檻鍥犵礌銆備互澶鍧婂湪鍏跺伐浣滃師鐞嗕腑浣跨敤瀵嗙爜瀛﹀拰鍘諱腑蹇冨寲鎶鏈錛屼繚鎶ょ敤鎴風殑淇℃伅鍏嶅彈嬈鴻瘓鍜屽悇縐嶆敾鍑葷殑褰卞搷銆傚逛簬浣跨敤鍔犲瘑璐у竵鐨勭敤鎴鳳紝浠ュお鍧婃彁渚涗簡涓涓闈炲父瀹夊叏鐨勫鉤鍙般
浠ュお鍧婄殑鐢ㄩ
浠ュお鍧婄殑鐢ㄩ旈潪甯稿箍娉涖傚畠琚騫挎硾搴旂敤浜庨噾鋙嶃佺墿嫻併佸尰鐤椼佷緵搴旈摼絳夐嗗煙錛屼互瀹炵幇鍘諱腑蹇冨寲鐨勫簲鐢ㄧ▼搴忋傚畠榪樺彲浠ョ敤浜庡壋寤烘暟瀛楄揣甯併佹父鎴忋侀煶涔愩佹姇紲ㄥ拰鍏朵粬涓撲笟搴旂敤紼嬪簭銆
浠ュお鍧婁笌姣旂壒甯佺殑鍖哄埆
浠ュお鍧婁笌姣旂壒甯佹湁璁稿氫笉鍚屼箣澶勩傞栧厛錛屾瘮鐗瑰竵涓昏佹槸涓縐嶅姞瀵嗚揣甯侊紝鑰屼互澶鍧婂垯鏄涓嬈懼鉤鍙幫紝鍙浠ュ疄鐜板幓涓蹇冨寲搴旂敤紼嬪簭鍜屾櫤鑳藉悎綰︺傚叾嬈★紝浠ュお鍧婁嬌鐢ㄧ殑鐩鏍囩畻娉曚笌姣旂壒甯佷笉鍚岋紝榪欐剰鍛崇潃瀹冨彲浠ュ勭悊鏇村氱殑浠誨姟銆傛渶鍚庯紝浠ュお鍧婄殑浜ゆ槗閫熷害鏇村揩錛屼氦鏄撹垂鐢ㄦ洿浣庛
緇撹
浠ュお鍧婃槸涓涓闈炲父鏈夊墠閫旂殑鍖哄潡閾炬妧鏈錛屽畠鎻愪緵浜嗚稿氭柊鐨勫姛鑳藉拰鐢ㄩ斻傚傛灉鎮ㄦ湁鍏磋叮浜嗚В鏇村氭湁鍏充互澶鍧婄殑淇℃伅錛岃瘋繘琛岃繘涓姝ョ殑鐮旂┒錛屽苟寮濮嬫帰緔浠ュお鍧婄殑鏃犻檺鍙鑳姐

H. 以太坊stratum協議原理

參照比特幣的 stratum協議 和 NiceHash的stratum協議規范 編寫了一版以太坊版本的stratum協議說明.

stratum協議是目前最常用的礦機和礦池之間的TCP通訊協議。

以太坊是一個去中心化的網路架構,通過安裝Mist客戶端的節點來轉發新交易和新區塊。而礦機、礦池也同時形成了另一個網路,我們稱之為礦工網路。

礦工網路分成礦機、礦池、錢包等幾個主要部分,有時礦池軟體與錢包安裝在一起,可合稱為礦池。

礦機與礦池軟體之間的通訊協議是 stratum ,而礦池軟體與錢包之間的通訊是 bitcoinrpc 介面。

stratum是 JSON 為數據格式.

礦機啟動,首先以 mining.subscribe 方法向礦池連接,用來訂閱工作。

礦池以 mining.notify 返回訂閱號、ExtraNonce1和ExtraNonce2_size。

Client:

Server:

其中:

是 訂閱號 ;

080c是 extranonce ,Extranonce可能最大3位元組;

礦機以 mining.authorize 方法,用某個帳號和密碼登錄到礦池,密碼可空,礦池返回 true 登錄成功。該方法必須是在初始化連接之後馬上進行,否則礦機得不到礦池任務。

Client:

Server:

難度調整由礦池下發給礦機,以 mining.set_difficulty 方法調整難度, params 中是難度值。
Server:

礦機會在下一個任務時採用新難度,礦池有時會馬上下發一個新任務並且把清理任務設為true,以便礦機馬上以新難度工作。

該命令由礦池定期發給礦機,當礦機以 mining.subscribe 方法登記後,礦池應該馬上以 mining.notify 返回該任務。

Server:

任務ID : bf0488aa ;

seedhash : 。每一個任務都發送一個seedhash來支持盡可能多的礦池,這可能會很快地在貨幣之間交換。

headerhash : 。

boolean cleanjobs : true 。如果設為true,那麼礦工需要清理任務隊列,並立即開始從事新提供的任務,因為所有舊的任務分享都將導致陳舊的分享錯誤。如果是 false 則等當前任務結束才開始新任務。

礦工使用seedhash識別DAG,然後帶著headerhash,extranonce和自己的minernonce尋找低於目標的share(這是由提供的難度而產生的)。

礦機找到合法share時,就以」 mining.submit 「方法向礦池提交任務。礦池返回true即提交成功,如果失敗則error中有具體原因。

Client:

任務ID : bf0488aa

minernonce : 6a909d9bbc0f 。注意minernonce是6個位元組,因為提供的extranonce是2個位元組。如果礦池提供3位元組的extranonce,那麼minernonce必須是5位元組

Server:

一般的礦機與礦池通訊過程就如下所示:

I. 一文了解以太坊礦機及挖礦原理

在以前的文章中,我們分別了解了比特幣挖礦和以太坊挖礦的區別。本文重點介紹以太坊挖礦及礦機部分。

以太坊是一個開源的有智能合約功能的公共區塊鏈平台,通過其專用加密貨幣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甚至更低,這就導致一般人不願意修建專門的顯卡礦機礦場(因為礦場主要賺取的是電費差價,同樣面積的場地,可以放置的顯卡數量少,消耗的電量更少)。即使有少量的顯卡礦場,收取的電費成本通常也比比特幣礦機礦場的高。

熱點內容
中國比特幣10月份價格 發布:2024-11-16 10:19:00 瀏覽:43
原神去別人世界挖礦共享嗎 發布:2024-11-16 09:56:39 瀏覽:131
可盈可樂比特幣蘋果下載 發布:2024-11-16 09:56:32 瀏覽:702
虛擬幣圈知識星球 發布:2024-11-16 09:33:31 瀏覽:372
比特幣交易去中心化為什麼還要平台 發布:2024-11-16 09:32:11 瀏覽:229
盈路證券usdt入金 發布:2024-11-16 09:28:34 瀏覽:814
審核比特幣etf 發布:2024-11-16 09:13:52 瀏覽:146
元宇宙宏觀經濟分析 發布:2024-11-16 09:07:16 瀏覽:484
百草區塊鏈下 發布:2024-11-16 09:07:07 瀏覽:430
偷電挖比特幣劃算嗎 發布:2024-11-16 08:55:07 瀏覽:457