From 7812fb28ea2c433091428d4299321a79d80b6563 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 11 Sep 2019 20:28:49 +0300 Subject: [PATCH] core: optimize blockchain init with existing DB There is no need to generate genesis block (it's already in the DB) and we can add all hashes at once without iterating over them. --- pkg/core/blockchain.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index dcd0167dd..dd8416c35 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -84,12 +84,6 @@ func NewBlockchain(ctx context.Context, s storage.Store, cfg config.ProtocolConf } func (bc *Blockchain) init() error { - genesisBlock, err := createGenesisBlock(bc.config) - if err != nil { - return err - } - bc.headerList = NewHeaderHashList(genesisBlock.Hash()) - // If we could not find the version in the Store, we know that there is nothing stored. ver, err := storage.Version(bc.Store) if err != nil { @@ -97,6 +91,11 @@ func (bc *Blockchain) init() error { if err = storage.PutVersion(bc.Store, version); err != nil { return err } + genesisBlock, err := createGenesisBlock(bc.config) + if err != nil { + return err + } + bc.headerList = NewHeaderHashList(genesisBlock.Hash()) return bc.persistBlock(genesisBlock) } if ver != version { @@ -119,12 +118,8 @@ func (bc *Blockchain) init() error { return err } - for _, hash := range hashes { - if !genesisBlock.Hash().Equals(hash) { - bc.headerList.Add(hash) - bc.storedHeaderCount++ - } - } + bc.headerList = NewHeaderHashList(hashes...) + bc.storedHeaderCount = uint32(len(hashes)) currHeaderHeight, currHeaderHash, err := storage.CurrentHeaderHeight(bc.Store) if err != nil {