Refactor NewBlockchain

This commit is contained in:
Ivan Kuznetsov 2017-08-28 16:16:45 +07:00
parent fdccadfb63
commit e6cf54a124
3 changed files with 19 additions and 32 deletions

Binary file not shown.

View File

@ -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

View File

@ -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()