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.");
        }