区块链V3版本实现之三

部分代码(block.go文件中添加序列化与反序列化):

 1 //序列化,将区块转换为字节流
 2 func (block *Block) Serialize() []byte {
 3 
 4    var buffer bytes.Buffer
 5 
 6    //定义编码器
 7    encoder := gob.NewEncoder(&buffer)
 8 
 9    //编码器对结构进行编码,一定要进行校验
10    err := encoder.Encode(block)
11    if err != nil {
12       log.Panic(err)
13    }
14    return buffer.Bytes()
15 }
16 
17 //反序列化,将字节流转换为区块
18 func Deserialize(data []byte) *Block {
19 
20    fmt.Print("解码传入的数据:%x\n",data)
21 
22    var block Block
23    //创建解码器
24    decoder := gob.NewDecoder(bytes.NewReader(data))
25    err := decoder.Decode(&block)
26 
27    if err != nil {
28       log.Panic(err)
29    }
30    return &block
31 }

部分代码(blockchain.go文件中在添加创世块后添加输出测试代码):

1 //添加创世块
2 genesisBlock := NewBlock(genesisInfo, []byte{})
3 b.Put(genesisBlock.Hash,genesisBlock.Serialize()/*将区块序列化,转成字节流*/)
4 b.Put([]byte("lastHashKey"),genesisBlock.Hash)
5 
6 ////区块数据读取,测试写入是否成功,成功就稍后注释
7 //blockInfo := b.Get(genesisBlock.Hash)
8 //block := Deserialize(blockInfo)
9 //fmt.Printf("解码后的block数据:%v\n",block)

显示效果:(注释main.go的输出)

 

posted @ 2020-12-04 23:09  北漂的尘埃  阅读(99)  评论(0编辑  收藏  举报