示例#1
0
            private void OnResult(MajorityResults majorityResult)
            {
                if (majorityResult == MajorityResults.Unreachable)
                {
                    var votesCount = resultMessageItem.ResultEnvelope.Signatures.Count;
                    if (resultMessageItem.ResultEnvelope.IsSignedBy(Global.Settings.KeyPair))
                    {
                        votesCount--;
                    }

                    var originalEnvelope = resultMessageItem.ResultMessage.OriginalMessage;
                    SequentialRequestMessage requestMessage = null;
                    if (originalEnvelope.Message is SequentialRequestMessage)
                    {
                        requestMessage = (SequentialRequestMessage)originalEnvelope.Message;
                    }
                    else if (originalEnvelope.Message is RequestQuantum)
                    {
                        requestMessage = ((RequestQuantum)originalEnvelope.Message).RequestEnvelope.Message as SequentialRequestMessage;
                    }

                    var exc = new Exception($"Majority for quantum {resultMessageItem.Apex} ({requestMessage.MessageType}) is unreachable. Results received count is {processedAuditors.Count}, valid results count is {votesCount}. The constellation collapsed.");
                    logger.Error(exc);
                    Global.AppState.State = ApplicationState.Failed;
                    throw exc;
                }

                SendResult();
            }
            private void OnResult(MajorityResults majorityResult)
            {
                if (majorityResult == MajorityResults.Unreachable)
                {
                    var votesCount = resultMessageItem.ResultEnvelope.Signatures.Count - 1;//one signature belongs to Alpha

                    var originalEnvelope = resultMessageItem.ResultMessage.OriginalMessage;
                    SequentialRequestMessage requestMessage = null;
                    if (originalEnvelope.Message is SequentialRequestMessage)
                    {
                        requestMessage = (SequentialRequestMessage)originalEnvelope.Message;
                    }
                    else if (originalEnvelope.Message is RequestQuantum)
                    {
                        requestMessage = ((RequestQuantum)originalEnvelope.Message).RequestEnvelope.Message as SequentialRequestMessage;
                    }

                    var exc = new Exception("Majority for quantum" +
                                            $" {resultMessageItem.Apex} ({requestMessage?.MessageType ?? originalEnvelope.Message.MessageType})" +
                                            $" is unreachable. Results received count is {processedAuditors.Count}," +
                                            $" valid results count is {votesCount}. The constellation collapsed.");
                    logger.Error(exc);
                    resultManager.Context.AppState.State = ApplicationState.Failed;
                    throw exc;
                }

                SendResult();
            }
示例#3
0
            private RawPubKey GetMessageAccount()
            {
                var originalEnvelope = ResultMessage.OriginalMessage;
                SequentialRequestMessage requestMessage = null;

                if (originalEnvelope.Message is SequentialRequestMessage)
                {
                    requestMessage = (SequentialRequestMessage)originalEnvelope.Message;
                }
                else if (originalEnvelope.Message is RequestQuantum)
                {
                    requestMessage = ((RequestQuantum)originalEnvelope.Message).RequestEnvelope.Message as SequentialRequestMessage;
                }

                if (requestMessage == null)
                {
                    return(null);
                }
                return(Global.AccountStorage.GetAccount(requestMessage.Account).Account.Pubkey);
            }