public void Add(AuditorResultMessage resultMessage, RawPubKey auditor) { if (!pendingAggregates.TryGetValue(resultMessage.Apex, out var aggregate)) { return; } //add the signature to the aggregate aggregate.Add(resultMessage, auditor); }
public void Add(AuditorResultMessage result, RawPubKey auditor) { lock (syncRoot) { if (IsProcessed || processedAuditors.Any(a => a.Equals(auditor))) { return; } processedAuditors.Add(auditor); var signature = new Ed25519Signature { Signature = result.Signature, Signer = auditor }; if (signature.IsValid(resultMessageItem.Hash) && !(resultMessageItem.IsTxResultMessage && result.TxSignature == null)) { resultMessageItem.ResultEnvelope.Signatures.Add(signature); if (resultMessageItem.IsTxResultMessage) { var txSignature = new Ed25519Signature { Signature = result.TxSignature, Signer = auditor }; ((ITransactionResultMessage)resultMessageItem.ResultMessage).TxSignatures.Add(txSignature); } } var majorityResult = CheckMajority(); if (majorityResult == MajorityResults.Unknown) { return; } OnResult(majorityResult); resultManager.Remove(resultMessageItem.Apex); IsProcessed = true; } }