コード例 #1
0
        public async Task ProcessDownloadJob_Success()
        {
            var chain = await _blockchainService.GetChainAsync();

            var originalBestChainHash   = chain.BestChainHash;
            var originalBestChainHeight = chain.BestChainHeight;
            var response = await _networkService.GetBlocksAsync(chain.LastIrreversibleBlockHash, 30, null);

            var peerBlocks = response.Payload;

            var peerBlock = peerBlocks.Last();

            await _blockDownloadJobManager.EnqueueAsync(peerBlock.GetHash(), peerBlock.Height, 5, null);

            await _blockDownloadWorker.ProcessDownloadJobAsync();

            chain = await _blockchainService.GetChainAsync();

            chain.BestChainHeight.ShouldBe(30);
            chain.BestChainHash.ShouldBe(peerBlock.GetHash());

            var block = await _blockchainService.GetBlockByHeightInBestChainBranchAsync(originalBestChainHeight);

            block.GetHash().ShouldNotBe(originalBestChainHash);
        }
コード例 #2
0
        public async Task ProcessDownloadJob_Success()
        {
            var response = await _networkService.GetBlockByHashAsync(HashHelper.ComputeFrom("PeerBlock"), null);

            var peerBlock = response.Payload;

            var jobId = await _blockDownloadJobManager.EnqueueAsync(peerBlock.GetHash(), peerBlock.Height,
                                                                    _blockSyncOptions.MaxBatchRequestBlockCount,
                                                                    null);

            await _blockDownloadWorker.ProcessDownloadJobAsync();

            var chain = await _blockchainService.GetChainAsync();

            chain.BestChainHeight.ShouldBe(31);

            var jobInfo = await _blockDownloadJobStore.GetFirstWaitingJobAsync();

            jobInfo.JobId.ShouldBe(jobId);
            _blockSyncStateProvider.TryGetDownloadJobTargetState(chain.BestChainHash, out var state).ShouldBeTrue();
            state.ShouldBeFalse();

            _blockSyncStateProvider.SetDownloadJobTargetState(chain.BestChainHash, true);

            await _blockDownloadWorker.ProcessDownloadJobAsync();

            jobInfo = await _blockDownloadJobStore.GetFirstWaitingJobAsync();

            jobInfo.ShouldBeNull();
            _blockSyncStateProvider.TryGetDownloadJobTargetState(chain.BestChainHash, out state).ShouldBeFalse();
        }
コード例 #3
0
        private async Task RunWorkerAsync(int times, List <BlockWithTransactions> peerBlocks)
        {
            for (int i = 0; i < times; i++)
            {
                foreach (var block in peerBlocks)
                {
                    _blockSyncStateProvider.TryRemoveDownloadJobTargetState(block.GetHash());
                }

                await _blockDownloadWorker.ProcessDownloadJobAsync();
            }
        }