创建第一个区块001
package main
import (
"crypto/sha256"
"fmt"
)
//定义结构
type Block struct {
//定义前区块哈希
Prevhash []byte
//定义当前区块哈希
Hash []byte
//数据
Data []byte
}
//2 创建区块 创建需要的数据和前区块的哈希
func NewBlock(data string,prevBlcokHash []byte) *Block {
block:=Block{
Prevhash: prevBlcokHash,
Hash: []byte{}, //先填空 后面计算
Data:[]byte(data),
}
block.SetHash()
return &block
}
//3. 将区块生成哈希 不需要返回值做内部哈希
func (block *Block) SetHash() {
//1. 拼装数据 前区块的哈希加上后区块的哈希
blockInfo:=append(block.Prevhash,block.Data...)
//2. sha256
hash:=sha256.Sum256(blockInfo)
block.Hash=hash[:] //[160 57 93 6 104 177 148 137 117 112 129 47 45 7 202 7 231 156 160 168 71 27 251 219 114 225 214 77 62 89 86 199]
}
//4. 引入区块链
//5. 添加区块
//6. 重构代码
func main() {
block:= NewBlock("老师让班长转一枚比特币",[]byte{})
fmt.Printf("前区块哈希值 %x\n",block.Prevhash)
fmt.Printf("当前区块哈希值 %x\n",block.Hash)
fmt.Printf("当前区块的数据 %s\n",block.Data)
/*
前区块哈希值
当前区块哈希值 a0395d0668b194897570812f2d07ca07e79ca0a8471bfbdb72e1d64d3e5956c7
当前区块的数据 老师让班长转一枚比特币
*/
}