Пример #1
0
        public async Task <List <SideChainBlockData> > GetSideChainBlockDataAsync(Hash currentBlockHash, long currentBlockHeight)
        {
            var sideChainBlockData = new List <SideChainBlockData>();
            var dict = await _crossChainContractReader.GetSideChainIdAndHeightAsync(currentBlockHash,
                                                                                    currentBlockHeight);

            foreach (var idHeight in dict)
            {
                var i            = 0;
                var targetHeight = idHeight.Value + 1;
                while (i < CrossChainConstants.MaximalCountForIndexingSideChainBlock)
                {
                    var blockInfo = _crossChainDataConsumer.TryTake <SideChainBlockData>(idHeight.Key, targetHeight, true);
                    if (blockInfo == null)
                    {
                        // no more available parent chain block info
                        break;
                    }
                    sideChainBlockData.Add(blockInfo);
                    Logger.LogTrace($"Got height {blockInfo.Height} of side chain  {ChainHelpers.ConvertChainIdToBase58(idHeight.Key)}");
                    targetHeight++;
                    i++;
                }
            }

            Logger.LogTrace($"Side chain block data count {sideChainBlockData.Count}");
            return(sideChainBlockData);
        }
        public void TryTake_EmptyCache()
        {
            int chainId   = 123;
            var blockInfo = _crossChainDataConsumer.TryTake <SideChainBlockData>(chainId, 1, false);

            Assert.Null(blockInfo);
        }