创建Block创建Block

package BlockChain
import (
"crypto/sha256"
"encoding/hex"
"time"
)
//构建区块链结构体——区块
type Block struct {
Index int64 //区块编号
Timestamp int64 //区块时间戳秒为单位,区块创建的时间
PrevBlockHash string //上一个区块哈希值
Hash string //当前区块的哈希值
Data string //区块所包含的数据
}
//计算区块的哈希值
func calculateHash(b Block) string{
//用区块的这几个部分作为hash内容
//string(b.Index) 将int64转化为string
blockData := string(b.Index) + string(b.Timestamp) + b.PrevBlockHash + b.Data
//计算hash值并存入字节数组
hashInBytes := sha256.Sum256([] byte(blockData))
return hex.EncodeToString(hashInBytes[:])
}
//生成区块
func GenerateNewBlock(preBlock Block, data string) Block{
//定义一个新的区块
newBlock := Block{}
//新区块的编号等于父区块的编号+1
newBlock.Index = preBlock.Index + 1
//新区块的哈希值等于上一个区块本身的hash值
newBlock.PrevBlockHash = preBlock.Hash
//新区块的时间戳等于当前时间
newBlock.Timestamp = time.Now().Unix()
//新区块的Hash是更新新内容计算得来
newBlock.Hash = calculateHash(newBlock)
return newBlock
}
//生成创世区块:是第一个区块,区块编号为0,区块的哈希值是一个空值,
//区块的时间戳和当前Hash值可以为它传递一个虚拟的父区块生成
// 在系统启动之前就已经生成好了
func GenerateGenesisBlock() Block{
preBlock := Block{}
preBlock.Index = -1
preBlock.Hash = ""
return GenerateNewBlock(preBlock,"First Block")
}