Ejemplo n.º 1
0
        private BlockchainProcessor CreateBlockChainProcessor(TRepositoryFactory repoFactory)
        {
            var web3 = new Web3.Web3(TargetConfiguration.BlockchainUrl);

            var steps = new BlockProcessingSteps();

            steps.BlockStep.AddProcessorHandler((b) => { log.Info($"Processing block {b.Number.Value}, Tx Count: {b.Transactions.Length}"); return(Task.CompletedTask); });
            steps.TransactionReceiptStep.AddProcessorHandler((tx) => { log.Info($"\tTransaction: Index: {tx.Transaction.TransactionIndex}, Hash: {tx.TransactionHash}"); return(Task.CompletedTask); });
            steps.FilterLogStep.AddProcessorHandler((l) => { log.Info($"\t\tLog: Index: {l.LogIndex}"); return(Task.CompletedTask); });

            var orchestrator = new BlockCrawlOrchestrator(web3.Eth, steps);

            orchestrator.ContractCreatedCrawlerStep.RetrieveCode = true;

            var lastConfirmedBlockNumberService = new LastConfirmedBlockNumberService(
                web3.Eth.Blocks.GetBlockNumber,
                TargetConfiguration.MinimumBlockConfirmations ?? LastConfirmedBlockNumberService.DEFAULT_BLOCK_CONFIRMATIONS,
                log);

            IBlockProgressRepository progressRepo = repoFactory.CreateBlockProgressRepository();

            var processor = new BlockchainProcessor(orchestrator, progressRepo, lastConfirmedBlockNumberService, log);

            return(processor);
        }
        public BlockchainProcessor CreateBlockProcessor(
            IBlockProgressRepository blockProgressRepository,
            Action <BlockProcessingSteps> stepsConfiguration,
            uint minimumBlockConfirmations,
            ILog log = null)
        {
            var processingSteps = new BlockProcessingSteps();
            var orchestrator    = new BlockCrawlOrchestrator(_ethApiContractService, processingSteps);
            var lastConfirmedBlockNumberService = new LastConfirmedBlockNumberService(_ethApiContractService.Blocks.GetBlockNumber, minimumBlockConfirmations);

            stepsConfiguration?.Invoke(processingSteps);

            return(new BlockchainProcessor(orchestrator, blockProgressRepository, lastConfirmedBlockNumberService, log));
        }