Improve UTXOSet
This commit is contained in:
parent
249b7f4eff
commit
7eda539141
13
cli.go
13
cli.go
|
@ -17,6 +17,7 @@ func (cli *CLI) printUsage() {
|
|||
fmt.Println(" getbalance -address ADDRESS - Get balance of ADDRESS")
|
||||
fmt.Println(" listaddresses - Lists all addresses from the wallet file")
|
||||
fmt.Println(" printchain - Print all the blocks of the blockchain")
|
||||
fmt.Println(" reindexutxo - Rebuilds the UTXO set")
|
||||
fmt.Println(" send -from FROM -to TO -amount AMOUNT - Send AMOUNT of coins from FROM address to TO")
|
||||
}
|
||||
|
||||
|
@ -35,8 +36,9 @@ func (cli *CLI) Run() {
|
|||
createBlockchainCmd := flag.NewFlagSet("createblockchain", flag.ExitOnError)
|
||||
createWalletCmd := flag.NewFlagSet("createwallet", flag.ExitOnError)
|
||||
listAddressesCmd := flag.NewFlagSet("listaddresses", flag.ExitOnError)
|
||||
sendCmd := flag.NewFlagSet("send", flag.ExitOnError)
|
||||
printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError)
|
||||
reindexUTXOCmd := flag.NewFlagSet("reindexutxo", flag.ExitOnError)
|
||||
sendCmd := flag.NewFlagSet("send", flag.ExitOnError)
|
||||
|
||||
getBalanceAddress := getBalanceCmd.String("address", "", "The address to get balance for")
|
||||
createBlockchainAddress := createBlockchainCmd.String("address", "", "The address to send genesis block reward to")
|
||||
|
@ -75,6 +77,11 @@ func (cli *CLI) Run() {
|
|||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
case "reindexutxo":
|
||||
err := reindexUTXOCmd.Parse(os.Args[2:])
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
default:
|
||||
cli.printUsage()
|
||||
os.Exit(1)
|
||||
|
@ -108,6 +115,10 @@ func (cli *CLI) Run() {
|
|||
cli.printChain()
|
||||
}
|
||||
|
||||
if reindexUTXOCmd.Parsed() {
|
||||
cli.reindexUTXO()
|
||||
}
|
||||
|
||||
if sendCmd.Parsed() {
|
||||
if *sendFrom == "" || *sendTo == "" || *sendAmount <= 0 {
|
||||
sendCmd.Usage()
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func (cli *CLI) reindexUTXO() {
|
||||
bc := NewBlockchain("")
|
||||
UTXOSet := UTXOSet{bc}
|
||||
UTXOSet.Reindex()
|
||||
|
||||
count := UTXOSet.GetCount()
|
||||
fmt.Printf("Done! There are %d transactions in the UTXO set.", count)
|
||||
}
|
26
utxo_set.go
26
utxo_set.go
|
@ -10,16 +10,15 @@ import (
|
|||
const utxoBucket = "chainstate"
|
||||
|
||||
// UTXOSet represents UTXO set
|
||||
type UTXOSet struct{}
|
||||
type UTXOSet struct {
|
||||
Blockchain *Blockchain
|
||||
}
|
||||
|
||||
// Reindex rebuilds the UTXO set
|
||||
func (u UTXOSet) Reindex(bc *Blockchain) {
|
||||
db, err := bolt.Open(dbFile, 0600, nil)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
func (u UTXOSet) Reindex() {
|
||||
db := u.Blockchain.db
|
||||
|
||||
err = db.Update(func(tx *bolt.Tx) error {
|
||||
err := db.Update(func(tx *bolt.Tx) error {
|
||||
bucketName := []byte(utxoBucket)
|
||||
b := tx.Bucket(bucketName)
|
||||
|
||||
|
@ -41,7 +40,7 @@ func (u UTXOSet) Reindex(bc *Blockchain) {
|
|||
log.Panic(err)
|
||||
}
|
||||
|
||||
UTXO := bc.FindAllUTXO()
|
||||
UTXO := u.Blockchain.FindAllUTXO()
|
||||
|
||||
err = db.Update(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte(utxoBucket))
|
||||
|
@ -64,14 +63,10 @@ func (u UTXOSet) Reindex(bc *Blockchain) {
|
|||
|
||||
// GetCount returns the number of transactions in the UTXO set
|
||||
func (u UTXOSet) GetCount() int {
|
||||
db := u.Blockchain.db
|
||||
counter := 0
|
||||
|
||||
db, err := bolt.Open(dbFile, 0600, nil)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
err = db.View(func(tx *bolt.Tx) error {
|
||||
err := db.View(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte(utxoBucket))
|
||||
c := b.Cursor()
|
||||
|
||||
|
@ -81,6 +76,9 @@ func (u UTXOSet) GetCount() int {
|
|||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
return counter
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue