コード例 #1
0
        public async Task BlockState_NoNeed_To_Merge()
        {
            var lastIrreversibleBlockHeight = -2;
            var lastIrreversibleBlockHash   = Hash.Generate();

            await _blockchainStateMergingService.MergeBlockStateAsync(lastIrreversibleBlockHeight,
                                                                      lastIrreversibleBlockHash);

            var chainStateInfo = await _blockchainStateManager.GetChainStateInfoAsync();

            chainStateInfo.BlockHeight.ShouldNotBe(lastIrreversibleBlockHeight);
            chainStateInfo.MergingBlockHash.ShouldNotBe(lastIrreversibleBlockHash);
        }
コード例 #2
0
        public async Task GlobalSetup()
        {
            _chains = GetRequiredService <IBlockchainStore <Chain> >();
            _chainStateInfoCollection      = GetRequiredService <IStateStore <ChainStateInfo> >();
            _blockchainStateManager        = GetRequiredService <IBlockchainStateManager>();
            _blockchainStateMergingService = GetRequiredService <IBlockchainStateMergingService>();
            _blockchainService             = GetRequiredService <IBlockchainService>();
            _osTestHelper             = GetRequiredService <OSTestHelper>();
            _chainManager             = GetRequiredService <IChainManager>();
            _blockManager             = GetRequiredService <IBlockManager>();
            _transactionManager       = GetRequiredService <ITransactionManager>();
            _transactionResultManager = GetRequiredService <ITransactionResultManager>();
            _txHub = GetRequiredService <ITxHub>();

            _blockStateSets = new List <BlockStateSet>();
            _blocks         = new List <Block>();

            _chain = await _blockchainService.GetChainAsync();

            var blockHash = _chain.BestChainHash;

            while (true)
            {
                var blockState = await _blockchainStateManager.GetBlockStateSetAsync(blockHash);

                _blockStateSets.Add(blockState);

                var blockHeader = await _blockchainService.GetBlockHeaderByHashAsync(blockHash);

                blockHash = blockHeader.PreviousBlockHash;
                if (blockHash == _chain.LastIrreversibleBlockHash)
                {
                    break;
                }
            }

            await _blockchainStateMergingService.MergeBlockStateAsync(_chain.BestChainHeight, _chain.BestChainHash);

            for (var i = 0; i < BlockCount; i++)
            {
                var transactions = await _osTestHelper.GenerateTransferTransactions(TransactionCount);

                await _osTestHelper.BroadcastTransactions(transactions);

                var block = await _osTestHelper.MinedOneBlock();

                _blocks.Add(block);

                var blockState = await _blockchainStateManager.GetBlockStateSetAsync(block.GetHash());

                _blockStateSets.Add(blockState);
            }

            var chain = await _blockchainService.GetChainAsync();

            await _chainManager.SetIrreversibleBlockAsync(chain, chain.BestChainHash);

            _chainStateInfo = await _chainStateInfoCollection.GetAsync(chain.Id.ToStorageKey());
        }
コード例 #3
0
 public async Task HandleEventAsync(NewIrreversibleBlockFoundEvent eventData)
 {
     _taskQueueManager.Enqueue(async() =>
     {
         await _blockchainStateMergingService.MergeBlockStateAsync(eventData.BlockHeight,
                                                                   eventData.BlockHash);
     }, KernelConsts.MergeBlockStateQueueName);
 }
コード例 #4
0
 public void MergeBlockStateTest()
 {
     AsyncHelper.RunSync(async() =>
     {
         var chain = await _blockchainService.GetChainAsync();
         await _blockchainStateMergingService.MergeBlockStateAsync(chain.BestChainHeight, chain.BestChainHash);
     });
     _counter.Increment();
 }
コード例 #5
0
        public async Task Get_Block_State_FewBlocks_Later()
        {
            var transactions = new List <Transaction>();

            for (int i = 0; i < 3; i++)
            {
                transactions.Add(await _osTestHelper.GenerateTransferTransaction());
            }

            await _osTestHelper.BroadcastTransactions(transactions);

            var block = await _osTestHelper.MinedOneBlock();

            //Continue generate block
            for (int i = 0; i < 10; i++)
            {
                await _osTestHelper.MinedOneBlock();
            }

            //Check Block State
            var blockState = await GetResponseAsObjectAsync <BlockStateDto>(
                $"/api/blockChain/blockState?blockHash={block.GetHash().ToHex()}");

            blockState.ShouldNotBeNull();
            blockState.BlockHash.ShouldBe(block.GetHash().ToHex());
            blockState.BlockHeight.ShouldBe(12);
            blockState.PreviousHash.ShouldBe(block.Header.PreviousBlockHash.ToHex());
            blockState.Changes.ShouldNotBeNull();

            var blockStateSet = await _blockchainStateManager.GetBlockStateSetAsync(block.GetHash());

            await _blockchainStateMergingService.MergeBlockStateAsync(blockStateSet.BlockHeight,
                                                                      blockStateSet.BlockHash);

            var errorResponse = await GetResponseAsObjectAsync <WebAppErrorResponse>(
                $"/api/blockChain/blockState?blockHash={block.GetHash().ToHex()}",
                expectedStatusCode : HttpStatusCode.Forbidden);

            errorResponse.Error.Code.ShouldBe(Error.NotFound.ToString());
            errorResponse.Error.Message.ShouldBe(Error.Message[Error.NotFound]);
        }
コード例 #6
0
        public async Task MergeBlockStateTest()
        {
            var chain = await _blockchainService.GetChainAsync();

            await _blockchainStateMergingService.MergeBlockStateAsync(chain.BestChainHeight, chain.BestChainHash);
        }