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 +}