go 创建自己的区块

Posted dqh123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 创建自己的区块相关的知识,希望对你有一定的参考价值。

package main

import (
    "time"
    "crypto/sha256"
    "bytes"

)

//区块体
type Block struct {
    //版本信息
    Version int64
    //前区块链的hash值
    PrevBlockHash []byte
    //当前区块的hash
    Hash []byte
    //梅卡尔根
    MerkelRoot []byte
    //时间戳
    TimeStamp int64
    //难度值
    Bits int64
    //随机数
    Nonce int64
    //交易信息
    Data []byte
}

func (block Block) setHash() {

    tep := [][]byte{
        IntToByte(block.Version),
        block.PrevBlockHash,
        block.MerkelRoot,
        IntToByte(block.TimeStamp),
        IntToByte(block.Bits),
        IntToByte(block.Nonce),
        block.Data,

    }
    data := bytes.Join(tep,[]byte{})

    hash := sha256.Sum256(data)
    block.Hash = hash[:]
}



func NewBlock(data string,prevBlockHash []byte) *Block {
   var block Block
   block = Block{
       Version:1,
       PrevBlockHash:prevBlockHash,
       MerkelRoot:[]byte{},
       TimeStamp:time.Now().Unix(),
       Bits : 1,
       Nonce:1,
       Data:[]byte(data),
   }

   block.setHash()

   return &block
}


//传世区块
func NewGenesisBlock() *Block{
    return NewBlock("Genesis Block!",[]byte{})
}

 

以上是关于go 创建自己的区块的主要内容,如果未能解决你的问题,请参考以下文章

只用200行Go代码写一个自己的区块链!

200行Go代码实现自己的区块链——区块生成与网络通信

只用200行Go代码写一个自己的区块链!

200行go语言代码自建一个区块链 体验挖矿乐趣

用go语言撸一个简易版的区块链

用go语言撸一个简易版的区块链