public static async Task <int> Execute( IBlockchainStoreRepositoryFactory repositoryFactory, BlockchainSourceConfiguration configuration, FilterContainer filterContainer = null, bool useGeth = false, ILog log = null) { IWeb3 web3 = useGeth ? new Web3Geth(configuration.BlockchainUrl) : new Web3.Web3(configuration.BlockchainUrl); using (var repositoryHandlerContext = new RepositoryHandlerContext(repositoryFactory)) { var blockProcessor = BlockProcessorFactory .Create( web3, repositoryHandlerContext.Handlers, filters: filterContainer, postVm: configuration.PostVm, processTransactionsInParallel: configuration.ProcessBlockTransactionsInParallel); var storageProcessingStrategy = new StorageProcessingStrategy( repositoryHandlerContext, blockProcessor) { MinimumBlockNumber = configuration.MinimumBlockNumber ?? 0, MinimumBlockConfirmations = configuration.MinimumBlockConfirmations ?? 0 }; var blockchainProcessor = new BlockchainProcessor(storageProcessingStrategy, log); var stopWatch = Stopwatch.StartNew(); var result = await blockchainProcessor.ExecuteAsync(configuration.FromBlock, configuration.ToBlock) .ConfigureAwait(false); System.Console.WriteLine("Duration: " + stopWatch.Elapsed); Debug.WriteLine($"Finished With Success: {result}"); System.Console.WriteLine("Finished. Success:" + result); System.Console.ReadLine(); return(result ? 0 : 1); } }
public static async Task <int> Execute( IBlockchainStoreRepositoryFactory repositoryFactory, BlockchainSourceConfiguration configuration, FilterContainer filterContainer = null, bool useGeth = false) { IWeb3Wrapper web3 = new Web3Wrapper( useGeth ? new Web3Geth(configuration.BlockchainUrl) : new Web3.Web3(configuration.BlockchainUrl)); using (_strategy = new PersistenceStrategy( repositoryFactory, filterContainer, minimumBlockNumber: configuration.MinimumBlockNumber ?? 0)) { var blockProcessor = new BlockProcessorFactory() .Create( web3, _strategy, configuration.PostVm, configuration.ProcessBlockTransactionsInParallel); var blockchainProcessor = new BlockchainProcessor(_strategy, blockProcessor); //this should not really be necessary //but without it, when the process is killed early, some csv records where not being flushed AppDomain.CurrentDomain.ProcessExit += (s, e) => { _strategy?.Dispose(); }; var stopWatch = Stopwatch.StartNew(); var result = await blockchainProcessor.ExecuteAsync(configuration.FromBlock, configuration.ToBlock) .ConfigureAwait(false); System.Console.WriteLine("Duration: " + stopWatch.Elapsed); Debug.WriteLine($"Finished With Success: {result}"); System.Console.WriteLine("Finished. Success:" + result); System.Console.ReadLine(); return(result ? 0 : 1); } }