Exemple #1
0
        private async Task <bool> ValidateTransactionAsync(BlockWithTransactions blockWithTransactions)
        {
            foreach (var transaction in blockWithTransactions.Transactions)
            {
                if (!transaction.VerifyExpiration(blockWithTransactions.Height - 1))
                {
                    Logger.LogWarning($"Transaction {transaction.GetHash()} expired.");
                    return(false);
                }

                // No need to validate again if this tx already in local database.
                if (await _blockchainService.HasTransactionAsync(transaction.GetHash()))
                {
                    continue;
                }

                if (!await _transactionValidationService.ValidateTransactionAsync(transaction))
                {
                    return(false);
                }

                var constrainedTransactionValidationResult =
                    _transactionValidationService.ValidateConstrainedTransaction(transaction,
                                                                                 blockWithTransactions.GetHash());
                _transactionValidationService.ClearConstrainedTransactionValidationProvider(blockWithTransactions
                                                                                            .GetHash());
                if (!constrainedTransactionValidationResult)
                {
                    Logger.LogWarning($"Transaction {transaction} validation failed for constraint.");
                    return(false);
                }
            }

            return(true);
        }
Exemple #2
0
        private async Task <bool> ValidateTransactionAsync(BlockWithTransactions blockWithTransactions)
        {
            foreach (var transaction in blockWithTransactions.Transactions)
            {
                // No need to validate again if this tx already in local database.
                var tx = await _transactionManager.GetTransactionAsync(transaction.GetHash());

                if (tx != null)
                {
                    continue;
                }

                if (!await _transactionValidationService.ValidateTransactionAsync(transaction))
                {
                    return(false);
                }

                var constrainedTransactionValidationResult =
                    _transactionValidationService.ValidateConstrainedTransaction(transaction,
                                                                                 blockWithTransactions.GetHash());
                _transactionValidationService.ClearConstrainedTransactionValidationProvider(blockWithTransactions
                                                                                            .GetHash());
                if (!constrainedTransactionValidationResult)
                {
                    return(false);
                }
            }

            return(true);
        }