摘要:我們給出的項數(shù)據(jù)只是一個簡單舉例,并沒有完全列舉生成區(qū)塊哈希時參與的所有數(shù)據(jù)。這里的哈希難度是我們認(rèn)為設(shè)定的,并不是真實哈希難度的生成方法。真是的哈希難度是由很復(fù)雜的數(shù)學(xué)模型實現(xiàn)的,是會根據(jù)當(dāng)前全網(wǎng)算力自動調(diào)整的。。
第四期 簡介go語言下挖礦難度的代碼實現(xiàn)(4)
卡酷少Wechat:13260325501
之前的都講完了,因為代碼太多導(dǎo)致文章比較長。所以新增了一片。在這最后的最后,我們將把挖礦的過程最終展示在大家面前。建議大家也將代碼在goland里實際跑一跑,會更有感覺。
挖礦難度的代碼實現(xiàn)話不多說,直接給代碼實現(xiàn)。
/* 代碼邏輯: 第一步:導(dǎo)庫 第二步:聲明并將各項值初始化,共5個數(shù)據(jù):blockId(區(qū)塊id),preHash,timeStamp(區(qū)塊誕生時間),data,nounce(不明白為什么需要這些數(shù)據(jù)的同學(xué)可以找回第四期(2)篇看一下) 第三步:聲明并創(chuàng)建一個哈希對象,shaObj 第四步:迭代調(diào)用函數(shù)isValidHashDifficulty來判斷哈希值有效與否。迭代中將nounce值以自增1的方式變化,再每次配合其他信息去生成當(dāng)前哈希。 */ package main import ( "fmt" //第1步 "crypto/sha256" ) func main() { //第2步 var ( blockId = "100" preHash = "0000fedaa499741317a18f1ad626f933776ad24822cb422634978bfe8005c94b" timeStamp = "Thu, 26 Apr 2018 03:30:54 GMT" data = "A -> B 100" nonce = 0 //將nounce初始化為0 (此處注意:nounce為int類型,但是在哈希時算數(shù)運算符兩邊的數(shù)據(jù)類型必須一致,所以要在字符串拼接時轉(zhuǎn)換類型) hashString = "" //將當(dāng)前hash初始化為空字符串 ) //第3步 shaObj := sha256.New() //第4步 for !isValidHashDifficulty(hashString, 4) { nonce++ input := blockId + preHash + timeStamp + data + string(nonce) shaObj.Write([]byte(input)) hashString = fmt.Sprintf("%x", shaObj.Sum(nil)); fmt.Println(hashString)//這里打印每次用于匹配的哈希值只是為了將挖礦的過程形象展示,并沒有額外含義,寫不寫都可以 } //當(dāng)生成有效哈希時,挖礦成功,迭代停止。 //現(xiàn)實中挖礦時不用停止,繼續(xù)挖下一個節(jié)點即可。 } func isValidHashDifficulty(h string, difficulty int) bool { b := len(h) // 64 var i int for i = 0; i < b; i++ { if h[i] != "0" { break } } return i >= difficulty }
運行結(jié)果沒有比較好的展示方式。這里我們只截取一部分。建議大家可以把代碼考下來跑一跑。
如果你已經(jīng)看過之前的篇章,相信這代碼的原理你已經(jīng)了然于胸了。下面我們只給出一些注意事項。
我們給出的5項數(shù)據(jù)只是一個簡單舉例,并沒有完全列舉生成區(qū)塊哈希時參與的所有數(shù)據(jù)。
我們?yōu)榱撕啽銓lockId設(shè)為了string類型,并不代表區(qū)塊id一定是字符串類型的。
這里的哈希難度是我們認(rèn)為設(shè)定的,并不是真實哈希難度的生成方法。真是的哈希難度是由很復(fù)雜的數(shù)學(xué)模型實現(xiàn)的,是會根據(jù)當(dāng)前全網(wǎng)算力自動調(diào)整的。
OK。到此挖礦的真相已經(jīng)大白了。不知道大家有沒有豁然開朗的感覺呢?。。。接下里我們就相約一起探索更多區(qū)塊鏈的內(nèi)容吧!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24083.html
摘要:區(qū)塊里的哈希是如何產(chǎn)生的如第四期篇里講到的,每個區(qū)塊里包含了,,,,,等信息。,就是將剩下的其他信息拼接成字符串,然后將這個字符串進(jìn)行哈希的結(jié)果。當(dāng)值取到某數(shù),并使之形成的哈希值匹配上了當(dāng)前的有效哈希難度,哈希碰撞就成功了。 第四期 簡介go語言下挖礦難度的代碼實現(xiàn)(3) 卡酷少Wechat:13260325501 經(jīng)過之前所有的鋪墊,這一期我們將對難度的代碼實現(xiàn)作出簡單演示。(以...
摘要:下圖給出一個簡單的列表圖什么是哈希和哈希值為理解挖礦的代碼機(jī)制,首先解決幾個概念。第一個就是哈希。哈希值為十六進(jìn)制表示的數(shù),且長度固定。也正是哈希值的這些特點,賦予了其加密信息時更高的安全性。 第四期 挖礦的相關(guān)算法(2) 卡酷少Wechat:13260325501 看過(1)篇,相信你一定對挖礦的機(jī)制有了一點了解。那么本篇,我們來一起看一下挖礦中涉及的算法。 在本篇文章中,如果在...
摘要:挖礦是什么挖礦是將一段時間內(nèi)比特幣系統(tǒng)中發(fā)生的交易進(jìn)行確認(rèn),并記錄在區(qū)塊鏈上形成新區(qū)塊的過程。而成功搶到記賬權(quán)的礦工,會獲得系統(tǒng)新生的比特幣獎勵。礦機(jī)只執(zhí)行單一的計算程序,實際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關(guān)挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們在第一...
摘要:而比特幣,是由中本聰化名提出,一種點對點,去中心化的數(shù)字資產(chǎn)。比特幣預(yù)計共有萬枚,大約將在年發(fā)行完畢。比特幣電子現(xiàn)金系統(tǒng)解決了在沒有中心機(jī)構(gòu)的情況下,總量恒定的數(shù)字資產(chǎn)的發(fā)行和流通問題。比特幣通過比特幣系統(tǒng)進(jìn)行轉(zhuǎn)賬,全網(wǎng)記錄公開透明。 第一期 比特幣與中本聰 卡酷少Wechat:13260325501 說起區(qū)塊鏈,就不得不提比特幣。也正是因為比特幣市場的火熱,比特幣系統(tǒng)的去中心化概...
摘要:第二期比特幣的總量和發(fā)行卡酷少上期我們簡單了解了比特幣的誕生及其創(chuàng)始人。記賬完成后,他將獲得一定數(shù)量的比特幣。每萬個區(qū)塊后,每個區(qū)塊的比特幣產(chǎn)量減半。從年至今,比特幣產(chǎn)量已經(jīng)減半次,當(dāng)前每個區(qū)塊發(fā)行個比特幣。早期約有的比特幣網(wǎng)站靠其導(dǎo)流。 第二期 比特幣的總量和發(fā)行 卡酷少Wechat:13260325501 上期我們簡單了解了比特幣的誕生及其創(chuàng)始人。今天我們將對比特幣做一些深入和...
閱讀 1923·2021-11-24 09:39
閱讀 2145·2021-09-22 15:50
閱讀 2024·2021-09-22 14:57
閱讀 712·2021-07-28 00:13
閱讀 1077·2019-08-30 15:54
閱讀 2368·2019-08-30 15:52
閱讀 2695·2019-08-30 13:07
閱讀 3794·2019-08-30 11:27