storage: fix reading overlapping hash blocks from the DB

In the unlikely event of overlapping hash block written to the DB we might end
up with wrong hash list. That happened to me for some reason when synching
with the testnet leading to the following keys with respective values:
  150000 -> 2000 hashes
  152000 -> 2000 hashes
  153999 -> 2000 hashes

Reading it hashes number 153999 and 154000 got the same values and the chain
couldn't sync correctly.
This commit is contained in:
Roman Khimov 2019-09-11 20:33:41 +03:00
parent 4f60fd3e8e
commit 4395cea344

View file

@ -74,7 +74,7 @@ func HeaderHashes(s Store) ([]util.Uint256, error) {
sort.Sort(uint32Slice(sortedKeys))
for _, key := range sortedKeys {
hashes = append(hashes, hashMap[key]...)
hashes = append(hashes[:key], hashMap[key]...)
}
return hashes, nil