亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

區(qū)塊鏈概念 That You Must Know 第四期(3)

k00baa / 1065人閱讀

摘要:區(qū)塊里的哈希是如何產(chǎn)生的如第四期篇里講到的,每個區(qū)塊里包含了,,,,,等信息。,就是將剩下的其他信息拼接成字符串,然后將這個字符串進行哈希的結(jié)果。當(dāng)值取到某數(shù),并使之形成的哈希值匹配上了當(dāng)前的有效哈希難度,哈希碰撞就成功了。

第四期 簡介go語言下挖礦難度的代碼實現(xiàn)(3)
卡酷少

Wechat:13260325501


經(jīng)過之前所有的鋪墊,這一期我們將對難度的代碼實現(xiàn)作出簡單演示。(以下是在不考慮近期各機構(gòu)對于區(qū)塊存儲信息改進的情況下。對于區(qū)塊信息的調(diào)整,有比如“隔離驗證”等方法。暫時不了解沒有關(guān)系,本期并不涉及這點。之后隨著學(xué)習(xí)的深入,我們會一一介紹給大家。)

本期我們將對上期圖二中幾項信息給出示例,然后代碼模擬難度的實現(xiàn)。

區(qū)塊里的哈希是如何產(chǎn)生的?

如第四期(1)篇里講到的,每個區(qū)塊里包含了index,current hash,previous hash,timestamp,data,nounce等信息。current hash,就是將剩下的其他信息拼接成字符串,然后將這個字符串進行哈希的結(jié)果。正如上一個區(qū)塊的當(dāng)前哈希也是由它之前的區(qū)塊的這些信息哈希生成的。

其中,nounce作為計算機窮舉的隨機數(shù),不斷變化,形成字符串的變化,產(chǎn)生了不同的哈希值。這個哈希值不斷去匹配現(xiàn)階段的哈希難度。當(dāng)nounce值取到某數(shù),并使之形成的哈希值匹配上了當(dāng)前的有效哈希難度,哈希碰撞就成功了。

以下為代碼實現(xiàn)

哈希sha256

先給出代碼

/*
代碼邏輯:
    第一步:導(dǎo)入crypto/sha256庫
    第二步:聲明字符串
    第三步:sha256.New()創(chuàng)建一個對象
    第四步:將字符串轉(zhuǎn)換為字節(jié)數(shù)組
    第五步:使用對象調(diào)用write方法
    第六步:first.Sum(nil) 返回hash值
*/

package main

import (
    //第1步
    "crypto/sha256"
    "fmt"
    "bytes"
)

func main() {
    //第2步
    const input1 = "199778A - > B 100"
    //第3步
    first := sha256.New()
    //第4步
    //第5步
    first.Write([]byte(input1))
    //第6步
    fmt.Printf("%x
", first.Sum(nil))


    const input2 = "Hello"
    second := sha256.New()
    second.Write([]byte(input2))
    fmt.Printf("%x
", second.Sum(nil))


    //輸出兩個哈希是否相等,bytes.Equal()
    fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil)))

}

==sha256== 輸出結(jié)果:

0000e1343c8d9ec8a8996f0c1c8d1f9f1d954a750c3db5525205f401c516222d
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
false

Process finished with exit code 0

其中一些函數(shù)大家一定急于了解,但這些函數(shù)的封裝過于艱深,我們在此不作深究。主要的是大家要記住四個關(guān)鍵步驟3,4,5,6,并熟練使用。其中包括以下幾點:

==sha256.New()== 有返回值,需要聲明變量并接收。且它的返回值一個是哈希對象,而且是一個指針對象。它可以調(diào)用一些方法,其中有write方法?!?步

哈希對象調(diào)用 ==obj.Write()== 方法是需要傳參,且參數(shù)類型為字節(jié)數(shù)組。所以涉及到要將哈希的字符串先轉(zhuǎn)化為 ==[ ]byte== 類型——第4步第5步

哈希對象調(diào)用 ==first.Sum(nil)== 方法返回哈希值,方法有參數(shù)且參數(shù)固定為==nil==;可以聲明變量接收或者直接輸出?!?步

關(guān)于哈希難度的判斷

要寫出挖礦難度的完整代碼,其中有一環(huán)節(jié)必須要解決。那就是如何判斷哈希難度是否是有效的呢?下面我們先給出代碼

/*
代碼邏輯:
(我們將代碼)
    第一步:聲明一個隨機取的哈希值,來在之后測驗isValidDifficulty是否有效
    第二步:設(shè)置當(dāng)前哈希難度,difficulty
    第三步:寫入一個循環(huán)來迭代匹配哈希值對應(yīng)位置的值,查看是否這個位置是否是哈希難度要求的值
    第四步:打印對這個哈希值的判斷
*/

package main

import "fmt"

func main() {
    h := "0000e1343c8d9ec8a8996f0c1c8d1f9f1d954a750c3db5525205f401c516222d"
    //h1 := "0033e1343c8d9ec8a8996f0c1c8d1f9f1d954a750c3db5525205f401c516222d"
    //h2 := "0003e1343c8d9ec8a8996f0c1c8d1f9f1d954a750c3db5525205f401c516222d"
    difficulty := 4
    var i int
    for i = 0; i < len(h); i++ {
        if h[i] != "0" {
            break
        }
    }
    fmt.Print( i >= difficulty)
}

h 運行結(jié)果

true
Process finished with exit code 0

h1 運行結(jié)果

false
Process finished with exit code 0

h2 運行結(jié)果

false
Process finished with exit code 0

于是我們將代碼封裝一下,使它看起來更清晰,更便于調(diào)用。

package main

import "fmt"

func main() {
    h := "0000e1343c8d9ec8a8996f0c1c8d1f9f1d954a750c3db5525205f401c516222d"
    fmt.Println(isValidHashDifficulty(h, 4))
}

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
}

下一篇給出完整代碼

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/24084.html

相關(guān)文章

  • 區(qū)塊概念 That You Must Know 四期(4)

    摘要:我們給出的項數(shù)據(jù)只是一個簡單舉例,并沒有完全列舉生成區(qū)塊哈希時參與的所有數(shù)據(jù)。這里的哈希難度是我們認為設(shè)定的,并不是真實哈希難度的生成方法。真是的哈希難度是由很復(fù)雜的數(shù)學(xué)模型實現(xiàn)的,是會根據(jù)當(dāng)前全網(wǎng)算力自動調(diào)整的。。 第四期 簡介go語言下挖礦難度的代碼實現(xiàn)(4) 卡酷少Wechat:13260325501 之前的都講完了,因為代碼太多導(dǎo)致文章比較長。所以新增了一片。在這最后的最后...

    funnyZhang 評論0 收藏0
  • 區(qū)塊概念 That You Must Know 四期(2)

    摘要:下圖給出一個簡單的列表圖什么是哈希和哈希值為理解挖礦的代碼機制,首先解決幾個概念。第一個就是哈希。哈希值為十六進制表示的數(shù),且長度固定。也正是哈希值的這些特點,賦予了其加密信息時更高的安全性。 第四期 挖礦的相關(guān)算法(2) 卡酷少Wechat:13260325501 看過(1)篇,相信你一定對挖礦的機制有了一點了解。那么本篇,我們來一起看一下挖礦中涉及的算法。 在本篇文章中,如果在...

    Sourcelink 評論0 收藏0
  • 區(qū)塊概念 That You Must Know 四期(1)

    摘要:挖礦是什么挖礦是將一段時間內(nèi)比特幣系統(tǒng)中發(fā)生的交易進行確認,并記錄在區(qū)塊鏈上形成新區(qū)塊的過程。而成功搶到記賬權(quán)的礦工,會獲得系統(tǒng)新生的比特幣獎勵。礦機只執(zhí)行單一的計算程序,實際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關(guān)挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們在第一...

    evin2016 評論0 收藏0
  • 區(qū)塊概念 That You Must Know 第二期

    摘要:第二期比特幣的總量和發(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)始人。今天我們將對比特幣做一些深入和...

    娣辯孩 評論0 收藏0
  • 區(qū)塊概念 That You Must Know 第一期.md

    摘要:而比特幣,是由中本聰化名提出,一種點對點,去中心化的數(shù)字資產(chǎn)。比特幣預(yù)計共有萬枚,大約將在年發(fā)行完畢。比特幣電子現(xiàn)金系統(tǒng)解決了在沒有中心機構(gòu)的情況下,總量恒定的數(shù)字資產(chǎn)的發(fā)行和流通問題。比特幣通過比特幣系統(tǒng)進行轉(zhuǎn)賬,全網(wǎng)記錄公開透明。 第一期 比特幣與中本聰 卡酷少Wechat:13260325501 說起區(qū)塊鏈,就不得不提比特幣。也正是因為比特幣市場的火熱,比特幣系統(tǒng)的去中心化概...

    zorro 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<