创建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") }