From e6cf54a124f72f17a10e2ac2716bd47f24922e82 Mon Sep 17 00:00:00 2001 From: Ivan Kuznetsov Date: Mon, 28 Aug 2017 16:16:45 +0700 Subject: [PATCH] Refactor NewBlockchain --- blockchain.db | Bin 32768 -> 32768 bytes blockchain.go | 47 +++++++++++++++++------------------------------ main.go | 4 ++-- 3 files changed, 19 insertions(+), 32 deletions(-) diff --git a/blockchain.db b/blockchain.db index f3f24abde6fae89fb4a4ef491047ec1bd402c7d4..090c32ce8f4764e27c0298725bbf74d4e9e09ced 100644 GIT binary patch delta 661 zcmZo@U}|V!+EA__&wTi3TKV_ie~hG8FPfdz`D5Ewz1gqKKJoqWRh>V_+Ig~pQ$W1k z|0c#io85Q4W8`&D%}XuLELL#J$xqH^QeYsUo$;Th7Xt(LQXcnnmaYDoZZ8T&RN^CK z7GFDQqIY_-c7!wSdN+BVqIfzX^Ardf#`sSuk0FPUs*Qn9csCgY2?*|H zfBt oEKnw|bCgLV;6+9S1_EX>{)_iuAQYTKH8u$NePiHHo<#u$0ISO)!vFvP delta 655 zcmZo@U}|V!+EA__&+xHht61_*2}bV9C!5k4GrTqWO0TxR@{U+?J>1pn#^grF@Q9jw zjJ)otd8x&j#R^V2`N`Q#3Je7FG5%vSVPIgtRdWCEq@c;ga`%#6Doksiesf37wn8zv zUoBs~zfIEw8XhpY!HJ!z)@brPMe%e(W-1UekntbuCx#qCsx}5b;oW2qBp}$&00H-b z6wpTuyC)|*sL(bB`8EVv;H?R n{@Lsf43z&4GHC?DkWqnwfSHW{nqmelDhRl3W8hDoMF9o?@z5bY diff --git a/blockchain.go b/blockchain.go index affba08..0aecb89 100644 --- a/blockchain.go +++ b/blockchain.go @@ -1,9 +1,7 @@ package main import ( - "fmt" "log" - "os" "github.com/boltdb/bolt" ) @@ -13,8 +11,7 @@ const blocksBucket = "blocks" // Blockchain keeps a sequence of Blocks type Blockchain struct { - blocks []*Block - tip []byte + tip []byte } // BlockchainIterator is used to iterate over blockchain blocks @@ -91,18 +88,18 @@ func (i *BlockchainIterator) Next() *Block { // NewBlockchain creates a new Blockchain with genesis Block func NewBlockchain() *Blockchain { bc := Blockchain{} + db, err := bolt.Open(dbFile, 0600, nil) + if err != nil { + log.Panic(err) + } + defer db.Close() - if _, err := os.Stat(dbFile); os.IsNotExist(err) { - fmt.Println("Creating a new blockchain...") - db, err := bolt.Open(dbFile, 0600, nil) - if err != nil { - log.Panic(err) - } - defer db.Close() + err = db.Update(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte(blocksBucket)) - genesis := NewGenesisBlock() + if b == nil { + genesis := NewGenesisBlock() - err = db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucket([]byte(blocksBucket)) if err != nil { log.Panic(err) @@ -117,26 +114,16 @@ func NewBlockchain() *Blockchain { if err != nil { log.Panic(err) } - - return nil - }) - - bc.tip = genesis.Hash - } else { - // TODO: remove the duplication, check for the "l" key - db, err := bolt.Open(dbFile, 0600, nil) - if err != nil { - log.Panic(err) - } - defer db.Close() - - err = db.View(func(tx *bolt.Tx) error { - b := tx.Bucket([]byte(blocksBucket)) + bc.tip = genesis.Hash + } else { tip := b.Get([]byte("l")) bc.tip = tip + } - return nil - }) + return nil + }) + if err != nil { + log.Panic(err) } return &bc diff --git a/main.go b/main.go index dec9ab4..58fcacd 100644 --- a/main.go +++ b/main.go @@ -8,8 +8,8 @@ import ( func main() { bc := NewBlockchain() - // bc.AddBlock("Send 1 BTC to Ivan") - // bc.AddBlock("Send 2 more BTC to Ivan") + bc.AddBlock("Send 1 BTC to Ivan") + bc.AddBlock("Send 2 more BTC to Ivan") bci := bc.Iterator()