Esempio n. 1
0
        private async Task PushTransactions(BlockRpcEntity model, BlockOperations operations)
        {
            foreach (var transaction in operations.Transactions)
            {
                var content = transaction.contents.Where(c =>
                                                         c.kind == TezosBlockOperationConstants.Transaction && c.metadata.operation_result.status ==
                                                         TezosBlockOperationConstants.OperationResultStatusApplied).ToList();
                foreach (var transactionContent in content)
                {
                    // Babylon upgrade - KT1 transactions are smart contract operations
                    var txSource      = transactionContent.GetTransactionSource();
                    var txDestination = transactionContent.GetTransactionDestination();
                    var txContent     = transactionContent.GetInternalTransactionContent();

                    var message = new PushMessage(new TransactionModel(model, transaction, txContent));
                    await _hubContext.Clients.Groups(
                        $"transactions_{txSource}",
                        $"transactions_{txDestination}",
                        "transactions_all"
                        )
                    .SendAsync("transactions", message);

                    _log.LogDebug($"Block {model.header.level} | " +
                                  $"Operation hash {transaction.hash} has been sent to the following groups [transactions_{transactionContent.source}, transactions_{transactionContent.destination}, transactions_all]");
                }
            }
        }
Esempio n. 2
0
        private async Task PushTransactions(IClientProxy clientsCaller, SubscribeModel subscribeModel,
                                            BlockRpcEntity model,
                                            BlockOperations operations)
        {
            foreach (var transaction in operations.Transactions)
            {
                var content = transaction.contents.Where(c =>
                                                         c.kind == TezosBlockOperationConstants.Transaction && c.metadata.operation_result.status ==
                                                         TezosBlockOperationConstants.OperationResultStatusApplied).ToList();
                foreach (var transactionContent in content)
                {
                    // Babylon upgrade - KT1 transactions are smart contract operations
                    var txSource      = transactionContent.GetTransactionSource();
                    var txDestination = transactionContent.GetTransactionDestination();
                    var txContent     = transactionContent.GetInternalTransactionContent();
                    if (subscribeModel.TransactionAddresses.Contains("all") ||
                        subscribeModel.TransactionAddresses.Contains(txSource) ||
                        subscribeModel.TransactionAddresses.Contains(txDestination))
                    {
                        var message = new PushMessage(new TransactionModel(model, transaction, txContent));
                        await clientsCaller.SendAsync("transactions", message);

                        _log.LogDebug($"History Block {model.header.level} | " +
                                      $"Operation hash {transaction.hash} has been sent. TxSource={txSource}, TxDestination={txDestination}");
                    }
                }
            }
        }
Esempio n. 3
0
 public OriginationModel(BlockRpcEntity block, BlockOperation <BlockOriginationContent> transactionOperation, BlockOriginationContent originationContent)
 {
     BlockHash          = block.hash;
     BlockLevel         = block.header.level;
     OperationHash      = transactionOperation.hash;
     Timestamp          = block.header.timestamp;
     OriginationContent = originationContent;
 }
Esempio n. 4
0
        public async Task PushOperations(IClientProxy clientsCaller, BlockRpcEntity blockModel, SubscribeModel subscribeModel)
        {
            var operations = blockModel.GetOperations();

            await PushTransactions(clientsCaller, subscribeModel, blockModel, operations);
            await PushDelegations(clientsCaller, subscribeModel, blockModel, operations);
            await PushOriginations(clientsCaller, subscribeModel, blockModel, operations);

            _log.LogDebug($"Processing history block {blockModel.header.level}. All operation messages have been sent.");
        }
Esempio n. 5
0
        public async Task PushOperations(BlockRpcEntity model)
        {
            var operations = model.GetOperations();

            await PushTransactions(model, operations);
            await PushDelegations(model, operations);
            await PushOriginations(model, operations);

            _log.LogDebug($"Processing block {model.header.level}. All operation messages have been sent.");
        }
Esempio n. 6
0
 public HeadModel(BlockRpcEntity model)
 {
     protocol            = model.protocol;
     chain_id            = model.chain_id;
     hash                = model.hash;
     level               = model.header.level;
     proto               = model.header.proto;
     predecessor         = model.header.predecessor;
     timestamp           = model.header.timestamp;
     validation_pass     = model.header.validation_pass;
     operations_hash     = model.header.operations_hash;
     fitness             = model.header.fitness;
     context             = model.header.context;
     proof_of_work_nonce = model.header.proof_of_work_nonce;
     signature           = model.header.signature;
 }
Esempio n. 7
0
        private async Task PushOriginations(BlockRpcEntity model, BlockOperations operations)
        {
            foreach (var originations in operations.Originations)
            {
                var content = originations.contents.Where(c =>
                                                          c.kind == TezosBlockOperationConstants.Origination && c.metadata.operation_result.status ==
                                                          TezosBlockOperationConstants.OperationResultStatusApplied).ToList();
                foreach (var originationContent in content)
                {
                    var message = new PushMessage(new OriginationModel(model, originations, originationContent));
                    await _hubContext.Clients.Groups(
                        $"originations_{originationContent.source}",
                        "originations_all"
                        )
                    .SendAsync("originations", message);

                    _log.LogDebug($"Block {model.header.level} | " +
                                  $"Operation hash {originations.hash} has been sent to the following groups [originations_{originationContent.source}, originations_all]");
                }
            }
        }
Esempio n. 8
0
        private async Task PushOriginations(IClientProxy clientsCaller, SubscribeModel subscribeModel,
                                            BlockRpcEntity model,
                                            BlockOperations operations)
        {
            foreach (var originations in operations.Originations)
            {
                var content = originations.contents.Where(c =>
                                                          c.kind == TezosBlockOperationConstants.Origination && c.metadata.operation_result.status ==
                                                          TezosBlockOperationConstants.OperationResultStatusApplied).ToList();
                foreach (var originationContent in content)
                {
                    if (subscribeModel.OriginationAddresses.Contains("all") ||
                        subscribeModel.OriginationAddresses.Contains(originationContent.source))
                    {
                        var message = new PushMessage(new OriginationModel(model, originations, originationContent));
                        await clientsCaller.SendAsync("originations", message);

                        _log.LogDebug($"History block {model.header.level} | " +
                                      $"Operation hash {originations.hash} has been sent. OriginationSource={originationContent.source}");
                    }
                }
            }
        }
Esempio n. 9
0
        private static void PushTransactions(IAsyncCollector <SignalRMessage> signalRMessages, BlockOperations operations,
                                             BlockRpcEntity model)
        {
            foreach (var transaction in operations.Transactions)
            {
                var content = transaction.contents.Where(c =>
                                                         c.kind == TezosBlockOperationConstants.Transaction && c.metadata.operation_result.status ==
                                                         TezosBlockOperationConstants.OperationResultStatusApplied).ToList();
                foreach (var operationContent in content)
                {
                    var transactionContent = (BlockTransactionContent)operationContent;
                    // Babylon upgrade - KT1 transactions are smart contract operations
                    var txSource      = transactionContent.GetTransactionSource();
                    var txDestination = transactionContent.GetTransactionDestination();
                    var txContent     = transactionContent.GetInternalTransactionContent();

                    signalRMessages.AddAsync(new SignalRMessage
                    {
                        GroupName = $"transactions_{txSource}",
                        Arguments = new object[] { new PushMessage(new TransactionModel(model, transaction, txContent)) },
                        Target    = "transactions"
                    });
                    signalRMessages.AddAsync(new SignalRMessage
                    {
                        GroupName = $"transactions_{txDestination}",
                        Arguments = new object[] { new PushMessage(new TransactionModel(model, transaction, txContent)) },
                        Target    = "transactions"
                    });
                    signalRMessages.AddAsync(new SignalRMessage
                    {
                        GroupName = "transactions_all",
                        Arguments = new object[] { new PushMessage(new TransactionModel(model, transaction, txContent)) },
                        Target    = "transactions"
                    });
                }
            }
        }
Esempio n. 10
0
 private static void PushDelegations(IAsyncCollector <SignalRMessage> signalRMessages, BlockOperations operations, BlockRpcEntity model)
 {
     foreach (var delegation in operations.Delegations)
     {
         var content = delegation.contents.Where(c =>
                                                 c.kind == TezosBlockOperationConstants.Delegation && c.metadata.operation_result.status ==
                                                 TezosBlockOperationConstants.OperationResultStatusApplied).ToList();
         foreach (var delegationContent in content)
         {
             signalRMessages.AddAsync(new SignalRMessage
             {
                 GroupName = $"delegations_{delegationContent.source}",
                 Arguments = new object[] { new PushMessage(new DelegationModel(model, delegation, delegationContent)) },
                 Target    = "delegations"
             });
             signalRMessages.AddAsync(new SignalRMessage
             {
                 GroupName = $"delegations_{delegationContent.@delegate}",
                 Arguments = new object[] { new PushMessage(new DelegationModel(model, delegation, delegationContent)) },
                 Target    = "delegations"
             });
             signalRMessages.AddAsync(new SignalRMessage
             {
                 GroupName = "delegations_all",
                 Arguments = new object[] { new PushMessage(new DelegationModel(model, delegation, delegationContent)) },
                 Target    = "delegations"
             });
         }
     }
 }