コード例 #1
0
ファイル: MessageHandler.cs プロジェクト: SpenQ/Prototype
        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);
        }