區塊鏈概念 That You Must Know 第四期(4)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

第四期 簡介go語言下挖礦難度的代碼實現(4)

卡酷少

Wechat:13260325501

之前的都講完了,因為代碼太多導致文章比較長。所以新增了一片。在這最後的最後,我們將把挖礦的過程最終展示在大家面前。建議大家也將代碼在goland裡實際跑一跑,會更有感覺。

挖礦難度的代碼實現

  • 話不多說,直接給代碼實現。
/*代碼邏輯:    第一步:導庫    第二步:聲明並將各項值初始化,共5個資料:blockId(區塊id),preHash,timeStamp(區塊誕生時間),data,nounce(不明白為什麼需要這些資料的同學可以找回第四期(2)篇看一下)    第三步:聲明並建立一個雜湊對象,shaObj    第四步:迭代調用函數isValidHashDifficulty來判斷雜湊值有效與否。迭代中將nounce值以自增1的方式變化,再每次配合其他資訊去產生當前雜湊。*/package mainimport (    "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類型,但是在雜湊時算數運算子兩邊的資料類型必須一致,所以要在字串拼接時轉換類型)        hashString = "" //將當前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)//這裡列印每次用於匹配的雜湊值只是為了將挖礦的過程形象展示,並沒有額外含義,寫不寫都可以    }    //當產生有效雜湊時,挖礦成功,迭代停止。    //現實中挖礦時不用停止,繼續挖下一個節點即可。}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}
  • 運行結果沒有比較好的展示方式。這裡我們只截取一部分。建議大家可以把代碼考下來跑一跑。

  • 如果你已經看過之前的篇章,相信這代碼的原理你已經瞭然於胸了。下面我們只給出一些注意事項。
  1. 我們給出的5項資料只是一個簡單舉例,並沒有完全列舉產生區塊雜湊時參與的所有資料。
  2. 我們為了簡便將blockId設為了string類型,並不代表區塊id一定是字串類型的。
  3. 這裡的雜湊難度是我們認為設定的,並不是真實雜湊難度的產生方法。真是的雜湊難度是由很複雜的數學模型實現的,是會根據當前全網算力自動調整的。
  • OK。到此挖礦的真相已經大白了。不知道大家有沒有豁然開朗的感覺呢?。。。接下裡我們就相約一起探索更多區塊鏈的內容吧!
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.