From 85022254ec669649bf61085006df1b8cc6a007ae Mon Sep 17 00:00:00 2001 From: Ivan Kuznetsov Date: Mon, 28 Aug 2017 12:11:51 +0700 Subject: [PATCH] Implement serialization and deserialization of a block --- block.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/block.go b/block.go index fd3d07c..4656080 100644 --- a/block.go +++ b/block.go @@ -1,6 +1,9 @@ package main import ( + "bytes" + "encoding/gob" + "log" "time" ) @@ -13,6 +16,19 @@ type Block struct { Nonce int } +// Serialize serializes the block +func (b *Block) Serialize() []byte { + var result bytes.Buffer + encoder := gob.NewEncoder(&result) + + err := encoder.Encode(b) + if err != nil { + log.Panic(err) + } + + return result.Bytes() +} + // NewBlock creates and returns Block func NewBlock(data string, prevBlockHash []byte) *Block { block := &Block{time.Now().Unix(), []byte(data), prevBlockHash, []byte{}, 0} @@ -29,3 +45,16 @@ func NewBlock(data string, prevBlockHash []byte) *Block { func NewGenesisBlock() *Block { return NewBlock("Genesis Block", []byte{}) } + +// DeserializeBlock deserializes a block +func DeserializeBlock(d []byte) *Block { + var block Block + + decoder := gob.NewDecoder(bytes.NewReader(d)) + err := decoder.Decode(&block) + if err != nil { + log.Panic(err) + } + + return &block +}