diff --git a/cmd/addblock/addblock.go b/cmd/addblock/addblock.go index a5beb346ec..53a2c019f3 100644 --- a/cmd/addblock/addblock.go +++ b/cmd/addblock/addblock.go @@ -85,6 +85,15 @@ func realMain() error { } defer db.Close() + // Load the UTXO database. + utxoDb, err := blockchain.LoadUtxoDB(context.Background(), activeNetParams, + cfg.DataDir) + if err != nil { + log.Errorf("Failed to load UTXO database: %v", err) + return err + } + defer utxoDb.Close() + fi, err := os.Open(cfg.InFile) if err != nil { log.Errorf("Failed to open file %v: %v", cfg.InFile, err) @@ -96,7 +105,7 @@ func realMain() error { // The done channel returned from start will contain an error if // anything went wrong. ctx, cancel := context.WithCancel(context.Background()) - importer, err := newBlockImporter(ctx, db, fi, cancel) + importer, err := newBlockImporter(ctx, db, utxoDb, fi, cancel) if err != nil { log.Errorf("Failed create block importer: %v", err) return err diff --git a/cmd/addblock/import.go b/cmd/addblock/import.go index 7d632c9c72..89a48f1f59 100644 --- a/cmd/addblock/import.go +++ b/cmd/addblock/import.go @@ -20,6 +20,7 @@ import ( "github.com/decred/dcrd/database/v3" "github.com/decred/dcrd/dcrutil/v4" "github.com/decred/dcrd/wire" + "github.com/syndtr/goleveldb/leveldb" ) var zeroHash = chainhash.Hash{} @@ -307,10 +308,18 @@ func (bi *blockImporter) Import(ctx context.Context) chan *importResults { // newBlockImporter returns a new importer for the provided file reader seeker // and database. -func newBlockImporter(ctx context.Context, db database.DB, r io.ReadSeeker, cancel context.CancelFunc) (*blockImporter, error) { +func newBlockImporter(ctx context.Context, db database.DB, utxoDb *leveldb.DB, r io.ReadSeeker, cancel context.CancelFunc) (*blockImporter, error) { subber := indexers.NewIndexSubscriber(ctx) go subber.Run(ctx) + // Instantiate a UTXO backend and UTXO cache. + utxoBackend := blockchain.NewLevelDbUtxoBackend(utxoDb) + utxoCache := blockchain.NewUtxoCache(&blockchain.UtxoCacheConfig{ + Backend: utxoBackend, + FlushBlockDB: db.Flush, + MaxSize: 100 * 1024 * 1024, // 100 MiB + }) + chain, err := blockchain.New(context.Background(), &blockchain.Config{ DB: db, @@ -318,6 +327,8 @@ func newBlockImporter(ctx context.Context, db database.DB, r io.ReadSeeker, canc Checkpoints: activeNetParams.Checkpoints, TimeSource: blockchain.NewMedianTime(), IndexSubscriber: subber, + UtxoBackend: blockchain.NewLevelDbUtxoBackend(utxoDb), + UtxoCache: utxoCache, }) if err != nil { return nil, err