public ResultWrapper <UInt256> analytics_verifyRewards() { RewardsVerifier rewardsVerifier = new RewardsVerifier(_logManager, (_blockTree.Head?.Number ?? 0) + 1); _blockTree.Accept(rewardsVerifier, CancellationToken.None); return(ResultWrapper <UInt256> .Success(rewardsVerifier.BlockRewards)); }
public async Task Suggesting_blocks_works_correctly_after_processor_restart(int suggestedBlocksAmount) { TestRpcBlockchain testRpc = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(); await testRpc.BlockchainProcessor.StopAsync(); IBlockTree tree = testRpc.BlockTree; long startingBlockNumber = tree.Head !.Number; SuggestNumberOfBlocks(tree, suggestedBlocksAmount); // simulating restarts - we stopped the old blockchain processor and create the new one BlockchainProcessor newBlockchainProcessor = new(tree, testRpc.BlockProcessor, testRpc.BlockPreprocessorStep, testRpc.StateReader, LimboLogs.Instance, BlockchainProcessor.Options.Default); newBlockchainProcessor.Start(); testRpc.BlockchainProcessor = newBlockchainProcessor; // fixing after restart StartupBlockTreeFixer fixer = new(new SyncConfig(), tree, testRpc.DbProvider.StateDb, LimboNoErrorLogger.Instance, 5); await tree.Accept(fixer, CancellationToken.None); // waiting for N new heads for (int i = 0; i < suggestedBlocksAmount; ++i) { await testRpc.WaitForNewHead(); } // add a new block at the end await testRpc.AddBlock(); Assert.AreEqual(startingBlockNumber + suggestedBlocksAmount + 1, tree.Head !.Number); }
public async Task Accept(IBlockTreeVisitor blockTreeVisitor, CancellationToken cancellationToken) { await _blockTree.Accept(blockTreeVisitor, cancellationToken); }