1.区块的创建
2018-07-03 本文已影响0人
J_zhe
前言:写这个教程的目的就是希望解开区块链底层的神秘面纱。本文建立在对区块链有一定了解,并且默认你会Go语言,文中将不会讲解代码的目录结构(最下方有源码地址),笔者会将比较难理解的地方抽丝剥茧出来讲解。
创建一个简单的区块
type Block struct {
Height int64 //区块的高度(编号)
Data []byte //交易数据
Timestamp int64 //时间戳
PrevHash []byte //上一个区块的哈希
Hash []byte //哈希
}
func NewBlock(height int64, data []byte, prev []byte) *Block {
block := &Block{
height,
data,
time.Now().Unix(),
prev,
nil,
0,
}
block.Hash = block.SetHash() //区块的哈希由一系列属性计算得来
return block
}
//生成Hash的函数
func (blc *Block) SetHash() []byte {
heightBytes := Int64ToBytes(blc.Height)
timeBytes := []byte( strconv.FormatInt(blc.Timestamp, 2) )
buff := [][]byte{
heightBytes,
blc.Data,
timeBytes,
blc.PrevHash,
}
buffRes := bytes.Join(buff, []byte{})
hash := sha256.Sum256(buffRes)
return hash[:]
}
//int64转[]byte
func Int64ToBytes(i int64) []byte {
var buf = make([]byte, 8)
binary.BigEndian.PutUint64(buf, uint64(i))
return buf
}
运行结果
区块的高度:1
交易数据:create block
时间戳:%!d(string=2018-07-05 05:49:40 PM)
上一个区块的哈希:00000000
Hash:71de577f0e69665b95edbbf16a6d8d43bdbe20a7f5edf89f61f1de4fb13b30b4
上面就是一个很简单的区块创建过程,是不是很简单呢?为了让这个教程做的简单。我们到此为止,下一节将讲解
如何创建区块链并创建创世区块
源码:https://gitee.com/itgjz/blockchain_learn/tree/master/block_chain_learn1