Refactor NewBlockchain
This commit is contained in:
parent
fdccadfb63
commit
e6cf54a124
BIN
blockchain.db
BIN
blockchain.db
Binary file not shown.
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue