private async Task SyncBlocks(int syncedHeight, int saveCount) { var streamCount = await _redisCommand.GetAsync <int>(Settings.Redis.BlockSyncStreamCacheHeight); while (streamCount < syncedHeight + saveCount) { await Task.Delay(TimeSpan.FromSeconds(1)); streamCount = await _redisCommand.GetAsync <int>(Settings.Redis.BlockSyncStreamCacheHeight); } _allowProgressUpdate = false; var nexusBlocks = new List <BlockDto>(); Console.WriteLine($"\nSyncing blocks from height {(syncedHeight + 1):N0} - {(syncedHeight + saveCount):N0}..."); for (var i = syncedHeight + 1; i <= syncedHeight + saveCount; i++) { nexusBlocks.Add(await _redisCommand.GetAsync <BlockDto>(CreateStreamKey(i))); } Console.WriteLine("Sync complete. Performing sync save..."); await _blockInsert.InsertBlocksAsync(nexusBlocks); foreach (var nexusBlock in nexusBlocks) { await _redisCommand.DeleteAsync(CreateStreamKey(nexusBlock.Height)); } _streamCount -= nexusBlocks.Count; }
public async Task AddAsync(BlockDto block) { if (block == null) { return; } await _redisCommand.SetAsync(Settings.Redis.BuildBlockCacheKey(block.Height), block); await _redisCommand.SetAsync(Settings.Redis.ChainHeight, block.Height); await _redisCommand.DeleteAsync(Settings.Redis.BuildBlockCacheKey(block.Height - Settings.App.BlockCacheSize)); }