Ejemplo n.º 1
0
        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);
                }
            }));
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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
                });
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }