private async Task IndexBlocksAsync(long blockNumber, long lastConfirmedBlockNumber) { var batchSize = _blockBatchSize ?? 1000; var processEventsTasks = new List <Task>(); for (var i = blockNumber; i <= lastConfirmedBlockNumber; i += batchSize) { var batchTo = Math.Min(i + batchSize, lastConfirmedBlockNumber); var transactionLogs = await _ethereumNodeJobClient.GetTransactionsLogs(blockNumber, batchTo); var processLogsTask = ProcessEventLogs(transactionLogs); processEventsTasks.Add(processLogsTask); } await Task.WhenAll(processEventsTasks); await _indexingStateRepository.SaveLastIndexedBlockNumber(lastConfirmedBlockNumber); _lastIndexedBlock = lastConfirmedBlockNumber; _log.Info($"Blocks from [{blockNumber}] to [{lastConfirmedBlockNumber}] has been indexed."); }