diff --git a/blockchain.db b/blockchain.db index f3f24ab..090c32c 100644 Binary files a/blockchain.db and b/blockchain.db differ 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()