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