golang-區塊鏈學習01

來源:互聯網
上載者:User

前言

區塊鏈技術現在也是IT界的網紅了,做點技術學習,不搞點跟區塊鏈沾邊的都好意思出去跟別人打招呼了。現在學習go語言剛好也蹭一波區塊鏈的熱度。

概要

golang知識點:
1、golang結構體使用
2、常用api使用,如bytes.Join、sha256.sum256、strconv.FormatInt等等,學習數組、切片的應用
區塊鏈簡化說明:
1、簡化的區塊對象Block包含四個成員,TimeStamp(時間戳記)、PreBlockHash(上一個區塊的雜湊值)、Data(儲存的資料內容)、Hash(自己區塊的雜湊值)
2、簡化的區塊鏈對象,包含一個區塊想的數組Blocks

編碼類比區塊鏈的構造建立

1、建立一個golang工程項目,目錄結構如下:目錄結構

說明:
bin目錄存放編譯產生的可執行檔
src-coin存放main.go
src-core存放block.go與blockChian.go

2、block.go
package coreimport (    "time"    "strconv"    "bytes"    "crypto/sha256")type Block struct {    TimeStamp     int64//時間戳記    Data          []byte//儲存的資料資訊    PrevBlockHash []byte// 上一個區塊的hash    Hash          []byte//本區塊的hash}// 建立一個新的區塊func NewBlock(data string, prevBlockHash []byte) *Block {        // 建立一個區塊,自己hash值為空白    block := &Block{time.Now().Unix(), []byte(data), prevBlockHash, []byte{}}      // 計算自己區塊的hash值    block.SetHash()    return block}func (b *Block) SetHash() {    strTimeStamp := []byte(strconv.FormatInt(b.TimeStamp, 10))    headers := bytes.Join([][]byte{b.PrevBlockHash, b.Data, strTimeStamp}, []byte{})    hash := sha256.Sum256(headers)    b.Hash = hash[:]}// 類比創世區塊func NewGenesisBlock() *Block {    return NewBlock("Genesis Block", []byte{})}
3、blockchain.go
package coretype BlockChain struct {    Blocks []*Block}// 添加區塊到鏈上func (bc *BlockChain) AddBlock(data string) {    preBlock := bc.Blocks[len(bc.Blocks)-1]// 擷取前一個區塊    newBlock := NewBlock(data, preBlock.Hash)//建立新區塊    bc.Blocks = append(bc.Blocks, newBlock)// 連結新區塊到鏈上}// 建立區塊鏈func NewBlockChain() *BlockChain {    return &BlockChain{[]*Block{NewGenesisBlock()}}}
4、main.go測試
package mainimport (    "core"    "fmt")func main() {    bc := core.NewBlockChain()//建立區塊鏈    bc.AddBlock("send 1 btc to Ivan")// 添加一個區塊到連上    bc.AddBlock("send 2 btc to Ivan")// 測試列印區塊鏈上的資訊    for _, block := range bc.Blocks {        fmt.Printf("PrevBlockHash:%x\n", block.PrevBlockHash)        fmt.Printf("Data:%s\n", block.Data)        fmt.Printf("Hash:%x\n", block.Hash)        fmt.Printf("TimeStamp:%d\n", block.TimeStamp)        println()    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.