private async Task <List <Transaction> > GenerateCrossChainIndexingTransactionAsync(Address from,
                                                                                            long refBlockNumber,
                                                                                            Hash previousBlockHash)
        {
            var generatedTransactions = new List <Transaction>();

            var crossChainTransactionInput =
                await _crossChainIndexingDataService.GetCrossChainTransactionInputForNextMiningAsync(previousBlockHash,
                                                                                                     refBlockNumber);

            if (crossChainTransactionInput == null)
            {
                return(generatedTransactions);
            }

            var previousBlockPrefix = previousBlockHash.Value.Take(4).ToArray();

            generatedTransactions.Add(GenerateNotSignedTransaction(from, crossChainTransactionInput.MethodName,
                                                                   refBlockNumber, previousBlockPrefix, crossChainTransactionInput.Value));

            Logger.LogTrace($"Cross chain transaction generated.");
            return(generatedTransactions);
        }
Exemplo n.º 2
0
        private async Task <List <Transaction> > GenerateCrossChainIndexingTransactionAsync(Address from,
                                                                                            long refBlockNumber,
                                                                                            Hash previousBlockHash)
        {
            var generatedTransactions = new List <Transaction>();

            var crossChainTransactionInput =
                await _crossChainIndexingDataService.GetCrossChainTransactionInputForNextMiningAsync(previousBlockHash,
                                                                                                     refBlockNumber);

            if (crossChainTransactionInput == null)
            {
                return(generatedTransactions);
            }

            generatedTransactions.Add(await GenerateNotSignedTransactionAsync(from, crossChainTransactionInput.MethodName, new BlockIndex
            {
                BlockHash   = previousBlockHash,
                BlockHeight = refBlockNumber
            }, crossChainTransactionInput.Value));

            Logger.LogTrace($"Cross chain transaction generated.");
            return(generatedTransactions);
        }
        public async Task PrepareExtraDataForNextMiningAsync_NoProposal_FirstTimeIndexing_Test()
        {
            var sideChainId             = 123;
            var sideChainBlockInfoCache = new List <IBlockCacheEntity>();
            var cachingCount            = 5;

            for (int i = 0; i < cachingCount + CrossChainConstants.DefaultBlockCacheEntityCount; i++)
            {
                sideChainBlockInfoCache.Add(new SideChainBlockData()
                {
                    ChainId = sideChainId,
                    Height  = (i + 1),
                    TransactionStatusMerkleTreeRoot = Hash.FromString((sideChainId + 1).ToString())
                });
            }

            _crossChainTestHelper.AddFakeSideChainIdHeight(sideChainId, 0);
            var fakeCache = new Dictionary <int, List <IBlockCacheEntity> > {
                { sideChainId, sideChainBlockInfoCache }
            };

            AddFakeCacheData(fakeCache);

            var res = await _crossChainIndexingDataService.PrepareExtraDataForNextMiningAsync(Hash.Empty, 1);

            Assert.Empty(res);
            var crossChainTransactionInput =
                await _crossChainIndexingDataService.GetCrossChainTransactionInputForNextMiningAsync(Hash.Empty, 1);

            Assert.NotNull(crossChainTransactionInput);
            var crossChainBlockData = CrossChainBlockData.Parser.ParseFrom(crossChainTransactionInput.Value);

            Assert.Single(crossChainBlockData.SideChainBlockDataList);
            Assert.Equal(sideChainBlockInfoCache.First().ToByteString(),
                         crossChainBlockData.SideChainBlockDataList.First().ToByteString());
        }