public void MarkBlockInvalid(UInt256 blockHash, Chain targetChain)
{
var invalidatedBlocks = new List<UInt256>();
try
{
this.blockStorage.Value.MarkBlockInvalid(blockHash);
invalidatedBlocks.Add(blockHash);
// mark any blocks further in the target chain as invalid
ChainedHeader invalidBlock;
if (targetChain.BlocksByHash.TryGetValue(blockHash, out invalidBlock))
{
for (var height = invalidBlock.Height; height <= targetChain.Height; height++)
{
invalidBlock = targetChain.Blocks[height];
this.blockStorage.Value.MarkBlockInvalid(invalidBlock.Hash);
invalidatedBlocks.Add(blockHash);
}
}
}
finally
{
foreach (var invalidatedBlock in invalidatedBlocks)
BlockInvalidated?.Invoke(invalidatedBlock);
}
}