/// <summary> /// Insert a new transaction to the incoming transaction processing queue. /// This queue is processed from time to time. /// </summary> /// <param name="transactionContent"></param> /// <param name="senderPublicKey"></param> public void InsertNewTransaction(TransactionContent transactionContent, Hash senderPublicKey) { TransactionProcessingResult rslt = transactionContent.VerifySignature(); if (rslt == TransactionProcessingResult.Accepted) { // Insert if the transaction does not already exist. if (!IncomingTransactions.ContainsKey(transactionContent.TransactionID)) { IncomingTransactions.TryAdd(transactionContent.TransactionID, transactionContent); } } else { // Add the user to the blacklist if signature is invalid or integrity checks fails. nodeState.GlobalBlacklistedUsers.Add(senderPublicKey); } }
/// <summary> /// Handles Propagation request /// </summary> /// <param name="transactionContent"></param> /// <returns></returns> public TransactionProcessingResult HandlePropagationRequest(TransactionContent transactionContent) { Interlocked.Increment(ref nodeState.NodeInfo.NodeDetails.TransactionsProcessed); TransactionProcessingResult rslt = transactionContent.VerifySignature(); transactionStateManager.Set(transactionContent.TransactionID, rslt); transactionStateManager.Set(transactionContent.TransactionID, TransactionStatusType.Proposed); if (!IncomingPropagations_ALL.ContainsKey(transactionContent.TransactionID)) { IncomingPropagations_ALL.TryAdd(transactionContent.TransactionID, transactionContent); } if (rslt == TransactionProcessingResult.Accepted) { lock (transactionLock) { // Insert if the transaction does not already exist. if (!IncomingPropagations.ContainsKey(transactionContent.TransactionID)) { if (IncomingPropagations.TryAdd(transactionContent.TransactionID, transactionContent)) { transactionStateManager.Set(transactionContent.TransactionID, TransactionStatusType.InPreProcessing); } else { DisplayUtils.Display("IncomingTransactionMap : HandlePropagationRequest : IncomingPropagations.TryAdd Failed", DisplayType.Warning); } } } } return rslt; }