Beispiel #1
0
        public override Task GetTransactionInfos(FullBlockRequest request, IServerStreamWriter <TransactionInfo> responseStream, ServerCallContext context)
        {
            return(Task.Run(async() =>
            {
                RegistryFullBlock registryFullBlock = (RegistryFullBlock)_registryChainDataService.Get(new DoubleHeightKey(request.SyncBlockHeight, request.Round));
                foreach (RegistryRegisterBlock transactionWitness in registryFullBlock.StateWitnesses)
                {
                    try
                    {
                        PacketBase blockBase = _transactionalDataService.Get(new SyncHashKey(transactionWitness.SyncBlockHeight, transactionWitness.ReferencedBodyHash));

                        if (blockBase != null)
                        {
                            await responseStream.WriteAsync(
                                new TransactionInfo
                            {
                                SyncBlockHeight = transactionWitness.SyncBlockHeight,
                                PacketType = (uint)transactionWitness.ReferencedPacketType,
                                BlockType = transactionWitness.ReferencedBlockType,
                                Content = ByteString.CopyFrom(blockBase.RawData.ToArray())
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"Failed to retrieve block for SyncBlockHeight {request.SyncBlockHeight} and Round {request.Round}", ex);
                    }
                }

                foreach (RegistryRegisterUtxoConfidential transactionWitness in registryFullBlock.UtxoWitnesses)
                {
                    try
                    {
                        PacketBase blockBase = _utxoConfidentialDataService.Get(new SyncHashKey(transactionWitness.SyncBlockHeight, transactionWitness.ReferencedBodyHash));

                        if (blockBase != null)
                        {
                            await responseStream.WriteAsync(
                                new TransactionInfo
                            {
                                SyncBlockHeight = transactionWitness.SyncBlockHeight,
                                PacketType = (uint)transactionWitness.ReferencedPacketType,
                                BlockType = transactionWitness.ReferencedBlockType,
                                Content = ByteString.CopyFrom(blockBase.RawData.ToArray())
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"Failed to retrieve block for SyncBlockHeight {request.SyncBlockHeight} and Round {request.Round}", ex);
                    }
                }
            }, context.CancellationToken));
        }
Beispiel #2
0
        public override Task GetTransactionRegistryBlockInfos(FullBlockRequest request, IServerStreamWriter <TransactionRegistryBlockInfo> responseStream, ServerCallContext context)
        {
            return(Task.Run(async() =>
            {
                RegistryFullBlock registryFullBlock = (RegistryFullBlock)_registryChainDataService.Get(new DoubleHeightKey(request.SyncBlockHeight, request.Round));

                foreach (RegistryRegisterBlock transactionWitness in registryFullBlock.StateWitnesses)
                {
                    TransactionRegistryBlockInfo blockInfo = new TransactionRegistryBlockInfo();

                    blockInfo.AccountedHeader = new AccountedTransactionHeaderDescriptor
                    {
                        SyncBlockHeight = transactionWitness.SyncBlockHeight,
                        ReferencedBlockType = transactionWitness.ReferencedBlockType,
                        ReferencedPacketType = (uint)transactionWitness.ReferencedPacketType,
                        ReferencedTarget = ByteString.CopyFrom(transactionWitness.ReferencedTarget),
                        ReferencedHeight = transactionWitness.BlockHeight
                    };

                    await responseStream.WriteAsync(blockInfo);
                }

                foreach (RegistryRegisterUtxoConfidential transactionWitness in registryFullBlock.UtxoWitnesses)
                {
                    TransactionRegistryBlockInfo blockInfo = new TransactionRegistryBlockInfo();

                    blockInfo.UtxoHeader = new UtxoTransactionHeaderDescriptor
                    {
                        SyncBlockHeight = transactionWitness.SyncBlockHeight,
                        ReferencedBlockType = transactionWitness.ReferencedBlockType,
                        ReferencedPacketType = (uint)transactionWitness.ReferencedPacketType,
                        ReferencedTarget = ByteString.CopyFrom(transactionWitness.DestinationKey),
                        ReferencedTransactionKey = ByteString.CopyFrom(transactionWitness.TransactionPublicKey),
                        KeyImage = ByteString.CopyFrom(transactionWitness.KeyImage.Value.ToArray())
                    };

                    await responseStream.WriteAsync(blockInfo);
                }
            }));
        }