From f4a2fbf64f1bee9b3112072296706d1aed9d8d28 Mon Sep 17 00:00:00 2001 From: Mike Zak Date: Mon, 16 Nov 2020 09:18:45 +0200 Subject: [PATCH] [NOD-1532] Fixes in updateVirtualDiffParents --- .../consensusstatemanager/update_virtual.go | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/domain/consensus/processes/consensusstatemanager/update_virtual.go b/domain/consensus/processes/consensusstatemanager/update_virtual.go index 37b65ee96..10c113ab2 100644 --- a/domain/consensus/processes/consensusstatemanager/update_virtual.go +++ b/domain/consensus/processes/consensusstatemanager/update_virtual.go @@ -51,6 +51,15 @@ func (csm *consensusStateManager) updateVirtual(newBlockHash *externalapi.Domain func (csm *consensusStateManager) updateVirtualDiffParents( newBlockHash *externalapi.DomainHash, virtualUTXODiff *model.UTXODiff) error { + // If the status of the new block is not `Valid` - virtualDiffParents didn't change + status, err := csm.blockStatusStore.Get(csm.databaseContext, newBlockHash) + if err != nil { + return err + } + if status != externalapi.StatusValid { + return nil + } + var newVirtualDiffParents []*externalapi.DomainHash if *newBlockHash == *csm.genesisHash { newVirtualDiffParents = []*externalapi.DomainHash{newBlockHash} @@ -66,35 +75,26 @@ func (csm *consensusStateManager) updateVirtualDiffParents( } newBlockParents := hashset.NewFromSlice(newBlockParentsSlice...) - newVirtualDiffParents := []*externalapi.DomainHash{} - status, err := csm.blockStatusStore.Get(csm.databaseContext, newBlockHash) - if err != nil { - return err - } - - if status == externalapi.StatusValid { - newVirtualDiffParents = append(newVirtualDiffParents, newBlockHash) - } - + newVirtualDiffParents = []*externalapi.DomainHash{newBlockHash} for _, virtualDiffParent := range virtualDiffParents { if !newBlockParents.Contains(virtualDiffParent) { newVirtualDiffParents = append(newVirtualDiffParents, virtualDiffParent) } } + } - for _, virtualDiffParent := range newVirtualDiffParents { - virtualDiffParentUTXODiff, err := csm.utxoDiffStore.UTXODiff(csm.databaseContext, virtualDiffParent) - if err != nil { - return err - } - newDiff, err := utxoalgebra.DiffFrom(virtualUTXODiff, virtualDiffParentUTXODiff) - if err != nil { - return err - } - err = csm.utxoDiffStore.Stage(virtualDiffParent, newDiff, nil) - if err != nil { - return err - } + for _, virtualDiffParent := range newVirtualDiffParents { + virtualDiffParentUTXODiff, err := csm.utxoDiffStore.UTXODiff(csm.databaseContext, virtualDiffParent) + if err != nil { + return err + } + newDiff, err := utxoalgebra.DiffFrom(virtualUTXODiff, virtualDiffParentUTXODiff) + if err != nil { + return err + } + err = csm.utxoDiffStore.Stage(virtualDiffParent, newDiff, nil) + if err != nil { + return err } }