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)); }
public BlockchainProcessor CreateBlockStorageProcessor( IBlockchainStoreRepositoryFactory blockchainStorageFactory, IBlockProgressRepository blockProgressRepository, uint minimumBlockConfirmations, Action <BlockProcessingSteps> configureSteps = null, ILog log = null) { var processingSteps = new BlockStorageProcessingSteps(blockchainStorageFactory); var orchestrator = new BlockCrawlOrchestrator(_ethApiContractService, processingSteps); if (blockProgressRepository == null && blockchainStorageFactory is IBlockProgressRepositoryFactory progressRepoFactory) { blockProgressRepository = progressRepoFactory.CreateBlockProgressRepository(); } blockProgressRepository = blockProgressRepository ?? new InMemoryBlockchainProgressRepository(); var lastConfirmedBlockNumberService = new LastConfirmedBlockNumberService(_ethApiContractService.Blocks.GetBlockNumber, minimumBlockConfirmations); configureSteps?.Invoke(processingSteps); return(new BlockchainProcessor(orchestrator, blockProgressRepository, lastConfirmedBlockNumberService, log)); }
public BlockchainCrawlingProcessor(BlockCrawlOrchestrator blockchainProcessingOrchestrator, IBlockProgressRepository blockProgressRepository, ILastConfirmedBlockNumberService lastConfirmedBlockNumberService, ILog log = null) : base(blockchainProcessingOrchestrator, blockProgressRepository, lastConfirmedBlockNumberService, log) { }