示例#1
0
        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;
        }
示例#2
0
        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));
        }