public OpenBlockStatus TryOpenBlock(CommittedBlockId parent, out UncommittedBlock freshBlock) { var blocks = GetBlocks(); var blockCount = AsHeader.BlockCount; var lowerIndex = Math.Max(0, blockCount - BlockScanLimit); freshBlock = default; if (blockCount == 0 && !parent.Equals(CommittedBlockId.GenesisParent)) { return(OpenBlockStatus.ParentNotFound); } // Find the parent, and assess the block height int parentBlockHeight = -1; var parentAlias = BlockAlias.Undefined; for (var i = blockCount - 1; i >= lowerIndex; i--) { ref var candidate = ref blocks[i]; if (candidate.IsDeleted) { continue; } if (candidate.BlockId.Equals(parent)) { parentBlockHeight = candidate.BlockHeight; parentAlias = candidate.Alias; break; } if (i == 0) { return(OpenBlockStatus.ParentNotFound); } }