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
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/boltdb/bolt"
|
"github.com/boltdb/bolt"
|
||||||
)
|
)
|
||||||
|
@ -13,8 +11,7 @@ const blocksBucket = "blocks"
|
||||||
|
|
||||||
// Blockchain keeps a sequence of Blocks
|
// Blockchain keeps a sequence of Blocks
|
||||||
type Blockchain struct {
|
type Blockchain struct {
|
||||||
blocks []*Block
|
tip []byte
|
||||||
tip []byte
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlockchainIterator is used to iterate over blockchain blocks
|
// 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
|
// NewBlockchain creates a new Blockchain with genesis Block
|
||||||
func NewBlockchain() *Blockchain {
|
func NewBlockchain() *Blockchain {
|
||||||
bc := 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) {
|
err = db.Update(func(tx *bolt.Tx) error {
|
||||||
fmt.Println("Creating a new blockchain...")
|
b := tx.Bucket([]byte(blocksBucket))
|
||||||
db, err := bolt.Open(dbFile, 0600, nil)
|
|
||||||
if err != nil {
|
|
||||||
log.Panic(err)
|
|
||||||
}
|
|
||||||
defer db.Close()
|
|
||||||
|
|
||||||
genesis := NewGenesisBlock()
|
if b == nil {
|
||||||
|
genesis := NewGenesisBlock()
|
||||||
|
|
||||||
err = db.Update(func(tx *bolt.Tx) error {
|
|
||||||
b, err := tx.CreateBucket([]byte(blocksBucket))
|
b, err := tx.CreateBucket([]byte(blocksBucket))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
|
@ -117,26 +114,16 @@ func NewBlockchain() *Blockchain {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
bc.tip = genesis.Hash
|
||||||
return nil
|
} else {
|
||||||
})
|
|
||||||
|
|
||||||
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))
|
|
||||||
tip := b.Get([]byte("l"))
|
tip := b.Get([]byte("l"))
|
||||||
bc.tip = tip
|
bc.tip = tip
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &bc
|
return &bc
|
||||||
|
|
4
main.go
4
main.go
|
@ -8,8 +8,8 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
bc := NewBlockchain()
|
bc := NewBlockchain()
|
||||||
|
|
||||||
// bc.AddBlock("Send 1 BTC to Ivan")
|
bc.AddBlock("Send 1 BTC to Ivan")
|
||||||
// bc.AddBlock("Send 2 more BTC to Ivan")
|
bc.AddBlock("Send 2 more BTC to Ivan")
|
||||||
|
|
||||||
bci := bc.Iterator()
|
bci := bc.Iterator()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue