From d3eba1c18217f3c32ec22b5eaf1d0f269a0adfce Mon Sep 17 00:00:00 2001 From: stasatdaglabs Date: Sun, 7 Jun 2020 09:18:03 +0300 Subject: [PATCH] [NOD-1040] Don't remove DAG tips from the diffStore's loaded set --- blockdag/utxodiffstore.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/blockdag/utxodiffstore.go b/blockdag/utxodiffstore.go index 1fa88168f..da1784067 100644 --- a/blockdag/utxodiffstore.go +++ b/blockdag/utxodiffstore.go @@ -156,7 +156,9 @@ func (diffStore *utxoDiffStore) clearDirtyEntries() { var maxBlueScoreDifferenceToKeepLoaded uint64 = 100 // clearOldEntries removes entries whose blue score is lower than -// virtual.blueScore - maxBlueScoreDifferenceToKeepLoaded. +// virtual.blueScore - maxBlueScoreDifferenceToKeepLoaded. Note +// that tips are not removed either, even if their blue score is +// lower than the above. func (diffStore *utxoDiffStore) clearOldEntries() { virtualBlueScore := diffStore.dag.VirtualBlueScore() minBlueScore := virtualBlueScore - maxBlueScoreDifferenceToKeepLoaded @@ -164,9 +166,11 @@ func (diffStore *utxoDiffStore) clearOldEntries() { minBlueScore = 0 } + tips := diffStore.dag.virtual.tips() + toRemove := make(map[*blockNode]struct{}) for node := range diffStore.loaded { - if node.blueScore < minBlueScore { + if node.blueScore < minBlueScore && !tips.contains(node) { toRemove[node] = struct{}{} } }