public override Task GetAllCombinedRegistryBlocksPerSync(ByHeightRequest request, IServerStreamWriter <CombinedRegistryBlockInfo> responseStream, ServerCallContext context) { return(Task.Run(() => { IEnumerable <PacketBase> blocks = _syncChainDataService.GetAllLastBlocksByType(BlockTypes.Synchronization_RegistryCombinationBlock).Where(b => ((SynchronizationRegistryCombinedBlock)b).SyncBlockHeight == request.Height); foreach (PacketBase blockBase in blocks) { SynchronizationRegistryCombinedBlock registryCombinedBlock = blockBase as SynchronizationRegistryCombinedBlock; CombinedRegistryBlockInfo combinedRegistryBlockInfo = new CombinedRegistryBlockInfo { SyncBlockHeight = registryCombinedBlock.SyncBlockHeight, Height = registryCombinedBlock.BlockHeight, CombinedRegistryBlocksCount = (uint)registryCombinedBlock.BlockHashes.Length, }; foreach (byte[] item in registryCombinedBlock.BlockHashes) { combinedRegistryBlockInfo.BlockDescriptors.Add(new FullBlockDescriptor { BlockHash = ByteString.CopyFrom(item) }); } responseStream.WriteAsync(combinedRegistryBlockInfo); } })); }
public override async Task GetCombinedRegistryBlocksInfoSinceHeight(ByHeightRequest request, IServerStreamWriter <CombinedRegistryBlockInfo> responseStream, ServerCallContext context) { IEnumerable <BlockBase> blocks = _syncChainDataService.GetAll(new BlockTypeLowHeightKey(BlockTypes.Synchronization_RegistryCombinationBlock, request.Height)); foreach (BlockBase blockBase in blocks) { SynchronizationRegistryCombinedBlock registryCombinedBlock = blockBase as SynchronizationRegistryCombinedBlock; CombinedRegistryBlockInfo combinedRegistryBlockInfo = new CombinedRegistryBlockInfo { SyncBlockHeight = registryCombinedBlock.SyncBlockHeight, Height = registryCombinedBlock.BlockHeight, CombinedRegistryBlocksCount = (uint)registryCombinedBlock.BlockHashes.Length, }; foreach (byte[] hash in registryCombinedBlock.BlockHashes) { RegistryFullBlock registryFullBlock = (RegistryFullBlock)_registryChainDataService.Get(new SyncHashKey(registryCombinedBlock.SyncBlockHeight, hash)); if (registryFullBlock != null) { combinedRegistryBlockInfo.BlockDescriptors.Add( new FullBlockDescriptor { SyncBlockHeight = registryCombinedBlock.SyncBlockHeight, Round = registryFullBlock.BlockHeight, TransactionsCount = (uint)registryFullBlock.TransactionHeaders.Count, BlockHash = ByteString.CopyFrom(hash) }); } } await responseStream.WriteAsync(combinedRegistryBlockInfo); } }
public override async Task GetDeltaSyncBlocks(ByHeightRequest request, IServerStreamWriter <SyncBlockDescriptor> responseStream, ServerCallContext context) { IEnumerable <PacketBase> blocks = _syncChainDataService.GetAll(new BlockTypeLowHeightKey(BlockTypes.Synchronization_ConfirmedBlock, request.Height)); foreach (PacketBase block in blocks) { await responseStream.WriteAsync(new SyncBlockDescriptor { Height = ((SynchronizationConfirmedBlock)block).SyncBlockHeight, Hash = ByteString.CopyFrom(_hashCalculation.CalculateHash(((SynchronizationConfirmedBlock)block).RawData)) //TODO: !!! need to change hash calculation in place to reading from database, otherwise DoS attack is allowed }); } }
public override async Task GetCombinedRegistryBlocksContentSinceHeight(ByHeightRequest request, IServerStreamWriter <TransactionInfo> responseStream, ServerCallContext context) { IEnumerable <PacketBase> blocks = _syncChainDataService.GetAll(new BlockTypeLowHeightKey(BlockTypes.Synchronization_RegistryCombinationBlock, request.Height)); foreach (PacketBase blockBase in blocks) { SynchronizationRegistryCombinedBlock registryCombinedBlock = blockBase as SynchronizationRegistryCombinedBlock; TransactionInfo blockInfo = new TransactionInfo { SyncBlockHeight = registryCombinedBlock.SyncBlockHeight, BlockType = registryCombinedBlock.BlockType, PacketType = (uint)registryCombinedBlock.PacketType, Content = ByteString.CopyFrom(registryCombinedBlock.RawData.ToArray()) }; await responseStream.WriteAsync(blockInfo); } }