只用200行Go代碼寫一個本身的區塊鏈!

「用不到200行 Go 代碼就能實現一個本身的區塊鏈!」 聽起來有意思嗎?有什麼能比開發一個本身的區塊鏈更好的學習實踐方法呢?那咱們就一塊兒來實踐下!html

由於咱們是一家從事醫療健康領域的科技公司,因此咱們採用人類平靜時的心跳數據(BPM心率)做爲這篇文章中的示例數據。讓咱們先來統計一下你一分鐘內的心跳數,而後記下來,這個數字可能會在接下來的內容中用到。

經過本文,你將能夠作到:git

  • 建立本身的區塊鏈github

  • 理解 hash 函數是如何保持區塊鏈的完整性web

  • 如何創造並添加新的塊算法

  • 多個節點如何競爭生成塊json

  • 經過瀏覽器來查看整個鏈瀏覽器

  • 全部其餘關於區塊鏈的基礎知識網絡

可是,對於好比工做量證實算法(PoW)以及權益證實算法(PoS)這類的共識算法文章中將不會涉及。同時爲了讓你更清楚得查看區塊鏈以及塊的添加,咱們將網絡交互的過程簡化了,關於 P2P 網絡好比「全網廣播」這個過程等內容將在下一篇文章中補上。數據結構

讓咱們開始吧!

設置

咱們假設你已經具有一點 Go 語言的開發經驗。在安裝和配置 Go 開發環境後以後,咱們還要獲取如下一些依賴:函數

go get github.com/davecgh/go-spew/spew

spew 能夠幫助咱們在 console 中直接查看 struct 和 slice 這兩種數據結構。

go get github.com/gorilla/mux

Gorilla 的 mux 包很是流行, 咱們用它來寫 web handler。

我有幾張阿里雲幸運券分享給你,用券購買或者升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,立刻就要搶光了。

go get github.com/joho/godotenv

godotenv 能夠幫助咱們讀取項目根目錄中的 .env 配置文件,這樣咱們就不用將 http port 之類的配置硬編碼進代碼中了。好比像這樣:

ADDR=8080

接下來,咱們建立一個 main.go 文件。以後咱們的大部分工做都圍繞這個文件,讓我開始編碼吧!

導入依賴

咱們將全部的依賴包以聲明的方式導入進去:

package main

import (
    "crypto/sha256"
    "encoding/hex"
    "encoding/json"
    "io"
    "log"
    "net/http"
    "os"
    "time"

    "github.com/davecgh/go-spew/spew"
    "github.com/gorilla/mux"
    "github.com/joho/godotenv"
)

數據模型

接着咱們來定義一個結構體,它表明組成區塊鏈的每個塊的數據模型:

type Block struct {
    Index     int
    Timestamp string
    BPM       int
    Hash      string
    PrevHash  string
}
  • Index 是這個塊在整個鏈中的位置

  • Timestamp 顯而易見就是塊生成時的時間戳

  • Hash 是這個塊經過 SHA256 算法生成的散列值

  • PrevHash 表明前一個塊的 SHA256 散列值

  • BPM 每分鐘心跳數,也就是心率。還記得文章開頭說到的嗎?

接着,咱們再定義一個結構表示整個鏈,最簡單的表示形式就是一個 Block 的 slice:

相關文章
相關標籤/搜索