private IEnumerable <Block> GetBlocksFromHash(string beginHash, string stopHash, bool includeBeginBlock) { var blocks = new List <Block>(); bool stopSearching = false; var bLockchain = _blockchainRepo.GetChainByNetId(_netId); // We fetch the blockchain to put a threadlock on it. lock (bLockchain) { var previousBlock = _blockchainRepo.GetBlockByHash(beginHash, _netId); var i = 0; if (includeBeginBlock) { blocks.Add(previousBlock); } while (i < NetworkConstants.MaxHeadersInMessage && !stopSearching) { // Stale blocks / side chains are not supported here try { previousBlock = _blockchainRepo.GetBlockByPreviousHash(previousBlock.Header.Hash, _netId); blocks.Add(previousBlock); if (previousBlock.Header.Hash == stopHash) { stopSearching = true; } } catch (KeyNotFoundException) { stopSearching = true; // No more blocks found } i++; } } return(blocks); }