From 23982003a413388c19316670ff737873a6b77d96 Mon Sep 17 00:00:00 2001 From: Ivan Kuznetsov Date: Tue, 15 Aug 2017 14:28:18 +0700 Subject: [PATCH] Implement blockchain as a storage of blocks --- main.go | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index 8c4933c..8adaa16 100644 --- a/main.go +++ b/main.go @@ -44,12 +44,32 @@ func NewGenesisBlock() *Block { return NewBlock("Genesis Block", []byte("0")) } -func main() { - gb := NewGenesisBlock() - b1 := NewBlock("Send 1 BTC to Ivan", gb.hash) - - fmt.Printf("%s\n", gb.Data) - fmt.Printf("%x\n", gb.hash) - fmt.Printf("%s\n", b1.Data) - fmt.Printf("%x\n", b1.hash) +// Blockchain keeps a sequence of Blocks +type Blockchain struct { + blocks []*Block +} + +// AddBlock saves provided data as a block in the blockchain +func (bc *Blockchain) AddBlock(data string) { + prevBlock := bc.blocks[len(bc.blocks)-1] + newBlock := &Block{time.Now().Unix(), []byte(data), prevBlock.hash, []byte("")} + newBlock.SetHash() + bc.blocks = append(bc.blocks, newBlock) +} + +// NewBlockchain creates a new Blockchain with genesis Block +func NewBlockchain() *Blockchain { + return &Blockchain{[]*Block{NewGenesisBlock()}} +} + +func main() { + bc := NewBlockchain() + + bc.AddBlock("Send 1 BTC to Ivan") + bc.AddBlock("Send 2 more BTC to Ivan") + + for _, block := range bc.blocks { + fmt.Printf("%s\n", block.Data) + fmt.Printf("%x\n", block.hash) + } }